Brain-Filling Curves a Fractal Bestiary
Jeffrey Ventrella
Ventrella, Jeffrey, J.
Brain-filling Curves - A Fractal Bestiary
Second edition
Book web site: www . f r actalcurves . com
ISBN 978-0-9830546-2-7
Copyright © 2012 by Jeffrey Ventrella
Distributed by Lulu.com
Cover Design by Jeffrey Ventrella
Eyebrain Books
www.eyebrainbooks.com
Contents
Acknowledgements 5
1 Horror Vacui 6
2 A Very Patient Turtle Who Draws Lines 16
3 A Taxonomy of Fractology 27
4 Gallery of Specimens (in order of family type) 47
V2 52
V3 53
a/4 Square Grid 60
V4 Triangle Grid 74
V5 84
V7 91
V8 112
V9 Square Grid 126
V9 Triangle Grid 131
V10 159
/12 162
a/13 Square Grid 168
V13 Triangle Grid 171
V16 Square Grid 174
a/1 6 Triangle Grid 177
V17 and Beyond 184
My Brain Fillith Over 202
References 203
BeS-tl-cir-y noun (plural bestiaries) Pronunciation: / 'bsstiari/
A descriptive or anecdotal treatise on various real or mythical kinds of animals, esp. a medieval work with a moralizing
tone. - Oxford Dictionary
4
Acknowledgements
I want to thank Kirk Israel for reviewing the book and making several keen suggestions. Thanks also to Mirja Holmboe,
Gary Walker, Beth O'Sullivan, Richard Montgomery, Portico Bowman, Hiroki Sayama, Eddie Elliot, Karl Stiefvater, Camp
Wilson, Claudia L'Amoreaux, and Scott Kim. Thanks to Scott Bowling, brother Philip, and Wayne Bollinger for great fun
and programming tips at the very start of this fractal journey. Thanks to professor Ed Zajec, who helped provide an
intellectual foundation for making fractal art. Finally, I want to thank Nuala Creed for love and patience with my many
obsessions, fractal and otherwise.
orror Vacui
Earth is filled with fractals: shapes and structures that have many levels of detail. Some of these are self-similar: they look
the same at multiple scales of magnification. Examples include river basins, which have branch-points on many scales.
Other examples of branching shapes can be
found in living organisms: trees, bloodstreams, and
bronchial tubes. All of these organic structures
demonstrate a need to cover as much space as possible,
to maximize tissue surface contact with air or light. s$*$^^^
Branching forms are wonderful and beautiful, but this
book is not strictly about branching forms; it is about
very long curly or kinky lines that fill-up areas of a 2D
plane. Much like river basins, these long curly lines
fully cover an area; they twist and turn so that they can
fill-in every corner of space. Interestingly enough: in
covering space so thoroughly, these curves acquire
branching profiles - of a huge variety, as you will see.
There is a concept in visual art known as: horror vacui: "fear of empty space", illustrated by many art styles
throughout history. The specimens in this book have a major case of horror vacui: they are truly haters of empty space! A
similar concept is found in physics: the notion that "nature abhors a vacuum." Fractal curves are very rich in
metaphorical power - providing models for art, physics, music, and biology. They even evoke philosophical concepts,
such as how the paths of our lives are repetitive, and filled with theme and variation - at every time scale.
Our Mascot
How could I not mention brain coral in a book called, "Brain-filling Curves' 7 ? Well, I will mention it now! This curious
undersea creature - a coral of the family Faviidae - is covered with wonderful curly mazes. Hats off to this inspiring
creature.
Certain animals - especially really long skinny ones - sometimes find the need to coil themselves up to take up a compact
space. We humans also happen to have about seven meters of intestine packed tightly into our abdomens: that's quite a
spacefiller!
Any time you have a long flexible linear object, and a desire to have that object take up a small space, you enter
into a special realm of geometrical problem-solving - a realm that involves twisting, turning, bending, folding, and
wrapping.
? '
This geometric realm is also invoked for the purpose of creating convoluted paths to follow, like a maze or a labyrinth.
j ^^^^^V Convoluted paths are also created when animals forage, or seek out things in
M ^^ "V the environment. Let's do a visual thought experiment: imagine that you are
I J C a squirrel, scurrying around on the ground under a tree. Your mate is up in
^^ * M the tree, and she asks you to collect as many acorns as you can, and bring
^^^^^^C^ them up to her. . .in a hurry.
O You think to yourself, "well, I could go straight to the tree and
^p*. y collect all the acorns in my path. That would get me to my mate quickly, but
^^ I may not collect many acorns/ 7 This is illustrated on the next page in panel
W (b). Just as you feared, when you arrive, your mate complains: "only five
acorns?" You confess that there were only five acorns in your immediate
path, and you grabbed them all up. The next day your mate asks you again
to come back home to the tree and to bring back as many acorns as you can. This time you decide to take a few diversions
on your way to the tree (one diversion to the left, and one diversion to the right). These diversions yield four more acorns,
as illustrated in panel (d).
If you feel that you have a little more time on your hands (or rather, your paws), you might decide to make
smaller diversions inside of your diversions - to grab up even more acorns. This is illustrated at the bottom of the page.
These smaller diversions have the same shape as the bigger ones, but they are on a smaller scale.
The result of this visual thought experiment is a two-level fractal curve - a curve that may look familiar to some
of you: it is the boundary of the quadric Koch Island [15]. The visual diagram that the squirrel conjured up in panel (c.) is
the "generator" for this fractal curve. The concept of generators will be explained in the next chapter.
« * « * •
fc « e e i
% * * # e
* € * * *
#
*
The diagram at left shows how the paths that make up the squirrel's
left-right diversions each have their own miniature left-right
diversions.
Now, you may ask: why doesn't our
make-believe squirrel just scan the whole field of ^ —
acorns one row at a time? Well, that's a valid
Z>
way to collect a field full of acorns, but it's (^
boring! (Our squirrel has a fractal mind.)
Z>
How many ways can you draw a curly line?
Infinite Strings
Imagine taking a piece of string, and coiling it up so that it takes
up a small space. The picture at the right shows a string with
black dots drawn at the endpoints. As we move these dots closer
to each other, we allow the string to curl up.
Imagine that our task is to make sure the string never
touches itself or crosses over itself, even as we push the
endpoints closer and closer to each other. Eventually of course,
the string will get packed so tightly that it will have to touch
itself. But that's only because physical strings have thickness.
This book is not about mortal pieces of string that reside
in our physical world. It is about Platonic pieces of string. A
perfect geometrical curve is infinitely thin, and so it can keep
coiling up as the ends get closer together - essentially
forever. . .and it will never touch itself.
But that's no fun. After all, the end result of this process
would be a blob of string so small that it would basically be a
point. And it is well established in science that infinitely small
things like points are extremely difficult to see.
♦
10
So instead let's imagine that we keep the endpoints the same distance from each other, and that
the string gets longer and longer, adding more and more bays and peninsulas to fill up space.
This is illustrated below. I use the term "fractalize" to describe this process. It turns out that there
are many ways that a curve can be fractalized as it gets longer. And we can capture some of these
ways in simple, elegant geometrical processes.
The art of discovering these processes, and the categorization of these curves, is the
subject of this book.
11
The drawing below shows one of the many fractal curves I have discovered. The two ends of the line are shown with
black dots, visible at the lower left and lower right. Because of the particular scheme this fractal curve uses to fill space,
there are unique self-similar patterns distributed throughout. The explanation for this phenomenon is explained later, as
well as the genetic code used to generate this particular specimen.
12
Filling-in the Gaps
A fractal curve that doesn't cross itself can be described as the boundary between two highly-intertwined domains. Like
sea and land, or like lungs and air, these boundaries can be highly convoluted. Let's take the fractal curve from the
previous page, and fill it up with light-blue water, to see what happens. . .
The curly lines have receded to the background and what we see instead are two domains: one white, and one light blue.
If this were a map of canals in a seaside village, you would use this to determine a route to paddle your gondola from one
part of the village to another. As a general rule, I prefer to let the beauty of the curve itself shine through, but in many
cases, the shapes between the curves are just as interesting. You will see that I use this colorizing technique for many of
the fractal images in this book.
13
Filling Your Brain
The evolution of brain folds is roughly correlated with advances in animal intelligence. Here are three brains for your
viewing pleasure: from left to right: rat, monkey, and human (these images have been scaled relative to each other).
I would like this book to cause a few more folds to grow in your brain. And I would like that growth to be joyful. Curves
that completely fill up a region of a plane are called "plane-filling curves' 7 . They are familiar to fractal-lovers:
mathematicians, geometers, and artists of the Escher ilk. For many of us, the reason we love these curves is not because
they answer questions like how to pack leftover spaghetti into a jar, or how to build a maze for your pet rat. The reason is
because we find them beautiful - visually and intellectually.
V
Although these kinds of curves have been created in the past, they were generally considered as mathematical curiosities,
or worse, "monsters' 7 until, in the 1970 , s, Benoit Mandelbrot coined the term "fractal" and brought together many of these
beasts under one umbrella; as a unified mathematical discipline. In his book, The Fractal Geometry of Nature [14],
Mandelbrot referred to plane-filling curves as "Peano Curves", in reference to Guiseppe Peano, an Italian mathematician
who described such curves in the 1890 , s [18]. Mandelbrot's book is the foundation for many of the concepts and terms I
use in this book. But I shall extend these ideas and terms, and put them in a new context - a context in which plane-filling
fractal curves can be explored without end - and with beautiful results.
14
A Definition
Now is a good time to give a more formal, more general definition: a "space-filling curve" can be described as a
continuous mapping from a lower-dimensional space into a higher-dimensional space. In traditional mathematics, a curve
is described as a topological space that is homeomorphic to a line: if you magnify a small region of the curve, it looks like a
straight line. The higher the magnification, the more it looks like a straight line. But... fractals came along and changed all
that! Consider a curvy line that has an infinite number of curls, bends and folds... at every level of magnification. And
consider a curve that has such a serious case of horror vacui that it visits every point in a planar area in its path from start to
finish. This is what we mean by a "plane-filling curve". It is the topological equivalent to a planar shape covering that
same region. So you can think of this curve as being a particular way to describe that planar shape. In other words, it
provides a mapping between a line and a 2D shape. Mandelbrot used the term "sweep" to distinguish a plane-filling
curve from any old 2D planar shape, implying the progression of a path that passes through every point in that shape
over some period of time. (A more thorough overview of space-filling curves is given by Hans Sagan [20]).
I have been exploring fractal curves
now for about twenty-five years, and I have
drawn several hundred pictures (probably
more than a thousand), in my lifelong search
for fractal curves. I have also developed
genetic algorithms and other computational
search techniques to find new specimens.
This book shows the culmination of my
search for plane-filling curves. I have
accumulated over 200 specimens and
organized them according to a taxonomy of
fractal curve families. Each specimen is
shown with a unique genetic code. And I
have included several color images of what I
consider to be the most striking specimens.
Many of these - I have reason to believe -
have never been seen before, and I am
delighted to introduce them to you.
15
A Very Patient Turtle Who Draws Lines
Before we go on, I want to say a few things about process. And for that I will introduce you to a helper who will be
demonstrating the principles used for drawing fractal curves: the LOGO turtle: a key feature of the LOGO programming
language, used in education [0]. The turtle has quite a distinguished history. It is used to help young people learn about
programming, math, and graphics. I am of a generation of people who learned about computer graphics and
programming with the help of the turtle. I am excited to show you how the turtle can be a bridge that connects simple,
visual ideas to advanced mathematical concepts, including the very complex and beautiful world of fractals. Let's follow
the turtle through a few demonstrations. It is shown as a little black image of a turtle, as seen from above. It can move
forward, rotate its body, and draw lines. Here are some basic actions that the turtle can do:
Draw a line 1 unit long:
finish
start
1, Draw a line 1 unit long
2. turn right 45 degrees
3 Draw a line 2 units long
finish
*
start
16
The turtle can perform a set of commands as one action - as a procedure, such as "DrawSquare"
DrawSquare:
1. draw a line 1 unit long
2. turn right 90 degrees
3. draw a line 1 unit long
4. turn right 90 degrees
5. draw a line 1 unit long
6. turn right 90 degrees
7. draw a line 1 unit long
8. turn right 90 degrees
*
*
1
A
V
*
start 8 steps:
1
2, 3
A, 5
6,7
8 (finish)
Now, the turtle will demonstrate a shape that is the basis of a well-known fractal curve: the Koch curve. First, the turtle
will rotate 90 degrees, so that it is aiming rightward. Then it will perform the procedure "DrawKoch":
DrawKoch:
1. draw a line 1 unit long
2. turn left 60 degrees
3. draw a line 1 unit long
4. turn right 120 degrees
5. draw a line 1 unit long
6. turn left 60 degrees
7. draw a line 1 unit long
start
This procedure, DrawKoch, can be modified so that it is scaled to one-third its original size, and the steps that draw lines
(steps 1, 3, 5, and 7 above) are replaced with copies of the whole procedure, as shown on the next page.
17
DrawKoch:
1 . draw a line 1 unit long
2. turn left 60 degrees
3. draw a line 1 unit long
4. turn right 120 degrees
5. draw a line 1 unit long
6. turn left 60 degrees
7. draw a line 1 unit long
DrawKoch:
0. Scale by 1/3
1. DrawKoch
2. turn left 60 degrees
3. DrawKoch
A. turn right 120 degrees
5. DrawKoch turn right 120
6. turn left 60 degrees *
\ <£ % /
DrawKoch
turn left 60
turn left 60
DrawKoch
This means that instead of the figure consisting of four line segments, it consists of four smaller copies of itself. Now, if
you think about this for a moment, you will realize that there is a paradox: each of these copies will then have to consist of
copies of themselves as well! And so on, and on. What we have is an infinite regression of copies of copies of copies....
Presto! We have a fractal. The problem is that it takes an infinite amount of time to draw an infinite number of lines, so we
choose a cut-off point where recursion stops. (The picture below stops at 5 levels.)
18
By the way, this curve is usually referred to as the "Koch Snowflake Curve", from the original description in 1904 by the
Swedish mathematician Helge von Koch [12] [13]. He showed the curve as a progression of applying triangular bumps
upon bumps onto the perimeter of a triangle. It looks a bit like a snowflake.
The Koch snowflake is the equivalent of three Koch curves connected together as if they
were the sides of an equilateral triangle. Mandelbrot referred to this triangle as the
"initiator", and the curve that is placed onto the three sides as the "generator". In this
book, I am mostly concerned with generators: that is, what happens in-between the two
endpoints of a single fractal curve.
I will not get into the nuts and bolts of programming fractal curves here. But I do
have to explain some aspects of the fractal algorithm: When I make a fractal image, I can
control the number of levels of which the copies are made. In other words, I can draw the
Koch curve at level 1, in which case it just consists of four line segments, or I can draw it
at level 2, in which case those lines consist of smaller copies of the Koch curve (scaled to
one-third of the length of the segments of level 1), making the whole curve a figure of 16
line segments. Level 3 would consist of 64 line segments, and level 4 would consist of 256
line segments, and so on. To be consistent with Mandelbrot's terminology, let's call this
fractal curve a "teragon" (as in the "5 th teragon" or "12 th teragon, and so on). Also,
throughout this book I will be using the term "fractalization" to denote the process of
increasing the fractal level from one teragon to the next - the process of replacing each
segment with a small copy of the generator.
Let's assume that the algorithm that draws a fractal curve automatically scales the smallest copies so that the
distance from endpoint to endpoint is always the same, no matter how many levels are used, and that the lengths of the
line segments always scale appropriately, just like the example shown on this page at right.
19
The Turtle Flips Out
Now, there is an important aspect of the fractals that our little turtle will be drawing; and that is the fact that the line
segments in a fractal generator can be "flipped" in various ways, to make the copies do clever tricks (which are important
for enabling the many varieties of plane-filling curves that will be shown later). But before I show you these tricks, I need
to create a new view of the turtle, to make it easer to explain. This view comes in four flavors, as shown below:
top-down view
(bilateral symmetry)
*
side view
(four ways to flip)
1,1
normal
-1,1
flipped along vertical axis
1,-1
flipped along horizontal axis
-1,-1
flipped in both axes
(same as rotation
by 180 degrees)
Now that we have these different views of the turtle, consider an image of the turtle drawing the Koch generator like this:
this segment is drawn upside-down
4.
20
The implication of this flipped segment is that the copy of the Koch generator that is drawn in place of that segment is
upside-down.
flipped^ \
whole section flipped
i
flipped
flipped
Now let's fractalize this to teragon 4. Well, this is no longer the Koch curve we know and love! It has changed quite a bit,
due to this single flipped segment in the generator. This flipping gets propagated to all the sub-copies, and it makes its
effect all they way to the small details of the fractal (although not in the smallest level).
21
How can this flip trick be used to make a plane-filling fractal curve? Glad you asked. I will show you. But first, consider
the following fractal generator with no flippings, and its first 6 teragons:
♦
no flippings
♦
22
That is an interesting fractal indeed. But it crosses itself all over the place - starting at teragon 3 and increasingly for each
level. It turns out that the turtle can do some flipping on alternating segments (the two diagonal ones), to transform this
into a plane-filling, self -avoiding, fractal curve. Here it is with the first 6 teragons:
flip
flip
♦
\
♦
With these two flippings, this curve can be fractalized forever and it will never cross itself.
23
1. draw
A flipping along the vertical axis is a bit more tricky to explain, because it implies that the turtle has jumped to the end of
the line and drawn it backwards. This concept might be easier to grasp for those of you who have used the LOGO turtle,
because the turtle can be told to move to a position (without drawing a line).
To illustrate this in a playful way,
imagine the turtle drawing a 3-segment
fractal generator in 6 steps, illustrated at
right. In order to draw the third segment,
the turtle flies to the end (step 3), draws the
line backwards and upside-down (step 4),
and then flies back to the endpoint again
(step 5), ending at the correct finishing
location (step 6). What is the fractalized
result? It is a cool self-avoiding curve, called
the "Dragon of Eve". Notice the
strategically-oriented bump at the bottom-
right of the second teragon - this is critical
to making The Dragon of Eve a self-
avoiding curve.
5.
24
Now let's look at a plane-filling fractal curve that takes advantage of another kind of flipping. (In this example, I have
shrunk the turtle in the top three segments, to indicate that they are half as long as the two segments at the bottom.) You
may find it difficult to see exactly how these flippings allow the curve to fractalize the way it does. So to make it a little bit
easier, I added some visuals to the first two teragons.
25
Pictures of flipped-out turtles are cute, but I will not be using them in the diagrams
throughout this book. Instead I will be using half-arrows because they are more
compact. So, the generator we just saw would be drawn like this. . .
In addition to representing these flippings visually with a half-arrows, they are also specified using a genetic code, as
shown in the table below. At the bottom is a representation using a pointing finger. I will use this in a few examples.
Flip Representations
1 ^ 1 ^ 1 1
turtle view
genetic code
1,1
-1,1
1,-1
-1,-1
pointing finger
I I I
«*J
You may still be having difficulty imagining how a turtle drawing lines can create such shapes. You might prefer to
understand the process in terms of transformations; copying shapes and then translating, scaling and rotating these
copies in various ways to create new fractal levels. If so, you are in luck: in the next chapter I will show you some fractal
generating techniques that are based on this idea. These techniques will help flesh-out in more general terms how fractals
are generated, and it will put my particular scheme into a larger perspective. This will give some context for the more
than 200 specimens archived in this book.
26
A Taxonomy of Fractology
There are many (many) kinds of fractals. The most popular fractals are the images generated with math equations iterated
in the complex plane, such as the Mandelbrot Set and the Julia Sets, and all their amazing variations and magnifications.
These fractals are generated by calculating a mathematical function for every pixel location of a 2D grid, using the x and y
coordinates of the grid as input values, to determine a color value. Mandelbrot and Julia sets use complex number
equations. They have been studied extensively, and reproduced with endless variety on the internet.
Fractals of this type are beautiful, complex, and amazing. But they do not easily lend themselves to learning the
basic geometry of fractals, as a form of visual construction. This is why I am so enamored with self-similar fractal curves -
as tools to think with; as visual objects to apply various geometrical ideas and processes from other domains. The process
27
by which they are constructed can be explained to non-mathematicians. And if you are curious enough, and especially if
you are willing to do a little bit of programming, it can lead to discovery upon discovery.
The fractal generation technique that I use in this book is a variation of "Koch construction". It is based on the idea of
taking a figure consisting of connected segments, and recursively replacing each segment with a copy of the whole figure.
This is how the Koch curve is generated, and it is also how an infinite number of other possible fractal curves can be
generated. Now, before I go on, I want to describe a few of the methods that have things in common with Koch
construction. In some cases, these might be considered variations, or different approaches, to Koch construction. They are:
• Node-replacement curves
• Iterated function systems (IFS)
• Branching Fractal Trees
• L-Systems
Node-Replacement Curves
One of the most well-studied techniques for generating plane-filling curves is a process that is similar to Koch
construction, except that it is based on node replacement instead of edge replacement. This technique has been explored by
mathematicians and hobbyists for centuries. Peano, Hilbert, Moore, and Wunderlich, are among the mathematicians who
have described such curves. Below is an example of using this technique to generate a well-known curve with a generator
of four nodes: the Hilbert Curve [9]. It is based on the fact that a square can be tiled with four smaller squares. Take a look
at how this simple generator is copied four times, transformed, and connected to form the shape at right:
2 3
1 4
1*
I
• ' I »
generator
four copies, transformed
connected
28
Now let's see six progressive fractalizations (with node connections added). The Hilbert curve is shown at left. On the
right is a variation called the Moore curve.
Node-replacement curves are generated by replacing tiles with smaller copies of the generator, while edge-replacement
curves are generated by replacing the segments of a generator with smaller copies of the generator. One important
consequence of node-replacement is that it requires connective segments to be added at each stage, to keep the curve
unbroken, as we just saw above. Some examples of similar curves are shown below: a curve attributed to Walter
Wunderlich (a); a curve attributed to Peano (b); and the Z-Order (Lebesgue) Curve (c). The Sierpinski Curve (d) is shown
here because it is similar, however it is of a different class: it uses a different kind of connectivity at each stage.
node-replacement curves
[UU}[\]
un
mm
mmmJ
to
(a)
(b)
(c)
(d)
29
Gary Teachout [22] came up with several fractal curves using a similar technique. A few are shown here.
original shape
copies, transformed
/L J^/L^L
original shape
copies, transformed
By the way, the resulting shape doesn't have to be a simple polygon; it can have a fractal boundary. Here's a generalized
technique for generating curves with node-replacement: start with a collection of tiling polygons, like squares, and
connect each of the tile centers with line segments, as shown below at left. Now...fractalize! Notice in this example that
although there are five tiles in the initial figure, there are only four line segments. This fact is why connecting lines are
required at each iteration (As we saw in the Hilbert curve, four square tiles are connected using three line segments).
^
The above curve fractalizes to the same shape as a well-known fractal curve introduced by Mandelbrot (at right). I'll be
describing this curve later on.
30
Iterated Function Systems
A more general class of fractal techniques is a process known as "iterated function systems" (IFS), conceived by John
Hutchinson [10], and developed further by Michael Barnsley [2], and others. An intuitive way to describe IFS is to start
with an initial image or piece of geometry, and to replace it with 2 or more copies of itself. Each copy has some
transformation applied to it (e.g., rotation, translation, scaling). With IFS, copies of the original shape are progressively
reduced in size repeatedly until they are essentially "atomized" as points, whose union creates the resulting shape.
As long as the copies are scaled to be smaller than the original geometry, the ultimate result is always a "dust" -
the number of visual elements goes to infinity, and their sizes become infinitely small, thus, the original geometry could
be anything, basically. Take the example below of the symbol for Pi, a hammer, and a poodle. This trio of elements is
copied twice, and each copy is scaled to 70% its original size. Using the bottom of the hammer as the pivot point, one copy
is rotated -40 degrees, and the other is rotated 60 degrees, and also translated down and to the right a bit. All these
translations happen in the frame of reference of the transformed copy. This example shows 8 iterations of this process,
and you can see that a fractal has emerged with its own peculiar shape - a shape that may not have been predicted from
applying the transformation only once.
n /
r< t \**, J2JL
V*
*4 vtf
31
Here is another picture that illustrates this process. In this picture, the original geometry consists of two gray squares,
shown at left with a larger outlined square for reference. Each gray square is replaced with the original geometry, using
the same relation that the gray squares have with the larger outlined square.
we
i P"
,>v "
■ fH
\J1 P
" -v.
«»>* tf
* $* *
,
jC^l*
VW
I"*
*r^ *
f
The fern is a classic natural form that is often used to demonstrate IFS.
/
\
, 4
\
IFS can be seen as a more general way to perform Koch construction. Just consider the
segments of a Koch generator as the original elements. Instead of poodles and hammers,
you start with straight lines, which happen to transform at each stage so that they
always form a connected chain.
32
Branching Fractal Trees
When visualizing hierarchical data structures with many branchings, such as classifications of biological species, one ends
up with a fractal-like shape, especially if there is deep hierarchy. This is indicated below in a Tree of Life drawn in 1866 by
the German biologist and illustrator Ernst Haeckel (a).
v V V
(c)
Branching fractals differ from Koch fractal curves in two primary ways: (1) they contain branch-points (obviously), and
(2) they include the whole hierarchy of ancestry used to calculate each level: trunk, branch, stem, and all. Koch
construction, on the other hand, replaces each parent generator with offspring copies when a new teragon is calculated,
leaving only the smallest, most detailed segments. The classic fractal tree (a) uses a single angle at each branch point, with
a uniform scaling < 1.0 of offspring segment lengths. When the angle is widened, we get a shape like (c). If the angle is 90
degrees (and if the length scaling is 1/V2) it becomes the H-tree (d) - a plane-filling, self-avoiding fractal. Irregular
branching forms can be created in a variety of ways, including diffusion-limited aggregation (e): start with a seed crystal
particle surrounded by free-floating particles moving randomly. If a floating particle comes in contact with the seed, it
sticks, thus extending the seed crystal, which gradually grows into a fuzzy branching fractal form.
33
L-Systems
In 1968, a botanist by the name of Astrid Lindenmayer devised a way of describing the growth of plants. This has come to
be known as "L-systems". They are recursive "string-rewriting systems", used to model branching forms, embryological
development, and many self-similar fractal geometries. Consider the following L-system description used to draw the
Koch curve:
axoim:
F
constants :
+ -
angle :
60
rule:
F - F+F-
-F+F
The axiom "F" means "draw a line segment". The symbol "+" means turn left 60 degrees. And the symbol "- " means
turn right 60 degrees. We start with the axiom "F", and we apply the rule, which replaces "F" with "F+F — F+F". This
results in a teragon 1 Koch curve. Notice the use of " — " to represent turning right twice, which makes a 120 degree right
turn. Now we apply the rule again, replacing all instances of "F" with "F+F — F+F". This gives us:
F+F — F+F+F+F — F+F — F+F — F+F+F+F — F+F
If we apply the rule a third time, replacing all instances of "F" with "F+F — F+F", we get:
F+F — F+F+F+F — F+F — F+F — F+F+F+F — F+F+
F+F — F+F+F+F — F+F — F+F — F+F+F+F — F+F--
F+F — F+F+F+F — F+F — F+F — F+F+F+F — F+F+
F+F — F+F+F+F — F+F — F+F — F+F+F+F — F+F
Once this string has been grown, it can be given to the turtle as a single list of instructions, and the turtle goes to work.
34
This is only the very beginning of what L-sys terns can do! L-sys terns are more than just a way to make fractals; they can
be used for describing (and constructing) a huge number of forms, including Hilbert curves and its variants, branching
forms, and many other shapes. L-sy stems can even be used for modeling embryological development over time. This
flexibility is because any kind of alphabet can be used (not just F's and +'s and - s) which can stand for any transformation
or operation you can imagine.
L-systems provide textual representations of fractals (linear strings of alphabetical symbols that are read from
start to finish). The turtle must read the entire string - like a novel or a score for a piano sonata - and follow it from start
to finish. Although L-systems are elegant, terse, and very expressive, I prefer to put the turtle into the middle of the
algorithm, so to speak, and engage the fractal growth process in a concrete, procedural way - to conceptually enter into the
geometrical process of fractalization - as a visual-spatial activity. My turtle is not reading a score; it is performing a fractal
dance - holding in its memory all the recursive levels and transformations required to do the dance.
Now that I have described a few alternate techniques and variations used to make fractals, I want to now
focus on the particular technique that I have devised. It is based on Koch construction, as described by Mandelbrot, but it
has some new and unique differences, which I think might make it easy to understand. Most importantly, my scheme
allows all Koch-constructed fractal curves to be placed into a taxonomy, allowing us to see relations and family types, and
to explore variations. Now, the first thing I have to explain is the backdrop upon which all these wonderful specimens are
generated: the grid.
Two Grids
All plane-filling fractal curves in my
scheme fit into one of two kinds of
grids: triangle or square. The distance
between grid points is exactly 1, in
either case. The most common fractal
curve angles and lengths in these
specimens are shown at right, associated
with each grid.
triangle grid
most common angles: ±60, 0, ±30, ±120
most common lengths: 1,^, 2
square grid
most common angles: ±90, 0, ±45
most common lengths: 1,V2, 2
35
Consider two curves: the Koch curve and a similar one with a
square bump (sometimes called the "Square Koch"). Not only
do the generators fit snuggly within their grids, but all of
their fractalized teragons fit snuggly as well (that is, they fit
snuggly into grids with smaller and smaller cells as fractals
levels increases).
Fractal Dimension
Notice also that each of these two fractal generators covers a
span of three grid units, from left to right. This span is called
the "interval length" of the fractal generator. The Koch curve
has four segments, but its squarish friend has five: it fills a bit
more space - it's slightly denser. More technically, it has a
higher fractal dimension. Fractal dimension extends the idea of
Euclidean dimension (integer numbers) to include fractional
numbers, and lots of fuzzy structures besides.
Here's how we calculate the fractal dimension of a
curve: we take the number of segments in the generator (call
it N), and then we take the interval length of the generator
(call it L). Then we calculate the fractal dimension using this
equation:
log N / log L
In the case of the Koch curve, N=4, and L=3, and so the fractal
dimension comes out to approximately 1.2618. For the square
Koch, N=5, and L=3, and it's fractal dimension is
approximately 1.4649. If the dimension of a fractal curve is 2 -
and if it is well-behaved - it is a plane-filling curve.
A.
Euclidean Dimension
Fractal Dimension
point
■-. fractal dust
line
^ ^* fractal curve
plane
fractal surface
solid volume
36
Families of fractal curves are determined according to how their generators fit within their grids, and what kinds of grids
they occupy. Not all fractal generators are as simple as Koch and its square friend. And not all fractal generators rest
horizontally on the grid. I'll give you two examples.
Let's draw a square grid, and then refer to a grid point in the lower left corner as the
origin. This will be the starting point for all fractal generators. Since all plane-filling fractal
generators fit into a grid, we can be sure that the end of the generator will always fall on a grid
point. Below is a square grid with two of the grid points indicated. The distance from the origin to
these grid points are V2 and V5, respectively. (We know this because of the Pythagorean theorem:
a 2 + b 2 = c 2 - see diagram at right). Well, it turns out that there are two very special fractal
generators that fit snuggly within these diagonal spaces. They are used to make the classic dragon
curve, and the // 5-dragon ,/ (that's the name I use for a fractal I discovered many years ago).
y^ r
v^
V^
<►
dragon curve generator
Let's fractalize these two generators and see what happens:
What have we here? We have two plane-filling fractal curves! That means their fractal dimensions are exactly 2. And it
should come as no surprise that the number of segments in each generator is exactly the square of the interval length. In
other words:
N = L 2
Now we have a consistent scheme for finding plane-filling fractal curves. The four fractals that I have just showed you are
listed in the table below, along with their associated grid type and interval length (which I call "family type"). This table
represents four different family types.
family type
Fractal name
Grid Type
Interval Length Dimension
Koch Curve
Square Koch
Dragon Curve
5-Dragon
triangle
square
square
square
9 (3)
"9 (3)
V5"
-1.2618
-1.4649
2
2
Grid Distances
It is easy to use the Pythagorean theorem to figure out the grid point distances from the origin in the square grid, but the
triangle grid is a bit more tricky. That is because the right triangle used to calculate a 2 + b 2 = c 2 has lengths that are not
integers.
The image at right shows how the Pythagorean
theorem is used on a triangle grid to find the length of
hypotenuse c, which represents the interval length of a fractal
generator. Remember that all fractal generator intervals fall
between two grid points. In the triangular grid, the length of
horizontal leg a will always be a multiple of 0.5, and the
length of vertical leg b will always be a multiple of V3/2. It
turns out that with these length multiples, the value of c is
always the square root of an integer. This is very convenient
for my fractal family taxonomy scheme!
38
a = 1.5
Now, look at these two grids:
V8~ \/l3
o o o
© • • •
origin
vr
v^
The distances from the origin to some of the grid points are shown. Notice that the distances shown at the bottom row are
expressed as square roots, but this is just another way of saying 1, 2, 3.
The square and triangle grids provide the backdrop for identifying all the families of plane-filling fractal curves.
Let's superimpose the triangle grid onto the square grid. In doing so, we see that there are many square root distances
from the origin that fall on grid points (but some are missing... like 6! - and the reason is very interesting - as I will
explain later).
V7V~;
V8~ TVl3
Vl2
„ 111
origin y^ - y^ - ^9"
Vl3
Vl2
y^ v VT v Vi3
\
1
v^
V9"
39
You may have noticed that I am only showing the distances within a certain clustered area
because there is no need to consider any grid points that lie outside a certain pie slice, as shown
For instance, in the square grid at right, an
octant is highlighted, with several distances shown.
All these distances could be found at grid points in
the other seven octants, so we only need one octant
to identify all the families. Similarly, in the
triangular grid I have highlighted a pie slice
occupying one twelfth the space. Any triangle-grid
family type can be represented in this slice.
in the grid,
below.
The reason is
'2
'8
/A
Vl8~ V25
13 V20
'10 Vl7
9~ vie
Ventrella Notation
This grid- view of fractal generators comprises the basis for how I categorize all plane-filling fractal curves. In The Fractal
Geometry of Nature, Mandelbrot specifies all fractal generators as existing within a horizontal interval of one unit. The
illustration below uses the Gosper curve as an example of how my notation scheme is slightly different than the one
Mandelbrot used. Instead of specifying the generator within the unit interval such that its endpoints lie on a horizontal
line, I place it within a grid, and orient it so that its second endpoint lies on the grid location associated with its family
type. This causes its interval length L to traverse a portion of the grid. My notation makes it visually more apparent that
the Gosper curve is a member of the V7 family type.
Mandelbrot Notation (specified in the interval [0, 1] )
N = 7
1 /r = V7
Ventrella Notation (specified in the triangular grid )
J
• ±>r
N = 7
L = V7
40
I should point out one thing about Mandelbrot's choice to place all generators on a horizontal interval of unit 1. This
normalizes the generator so that it is easier to comprehend (and compute) the mathematical transformation of that
generator into smaller copies that are then placed onto itself. The unit vector represents a normalized generator segment.
My scheme may be less elegant in terms of mathematical expression, but it affords a way to classify generators within a
large taxonomy, whereby the placement of the generator within the grid is the basis of the classification. Interestingly, my
software algorithms necessarily transform all generators to a representation within the unit interval - for ease of
computation. So perhaps Mandelbrot representation could be seen as a necessary step, both algorithmically and
conceptually.
In one sense, my scheme for finding plane-filling fractal curves is simple, using the grid as a guide. However, it is
not as simple as you might think (if you are novice in the fine art of fractalizing), because there are many misbehaved,
self-crossing, and otherwise clumpy, hole-ridden fractals out there, obscuring the beautiful gems. And the difference
between the well-behaved plane-fillers and the misbehaved ones is not something you can easily determine just by
looking at a generator. For many generators, especially the ones with large interval lengths, you just have to fractalize
them and find out. And you have to be patient.
41
Self-avoiders and Gridfillers
There are a few more points I want to make before we take the tour of the specimens. I mentioned that some fractal curves
are "well-behaved", but most are not. I need to be a little more specific than that. There are four distinct ways that a
fractal curve can behave, in terms of how it interacts with itself:
self-avoiding
self-contacting (vertex) self-contacting (edge)
self-crossing
1 — w*
42
Because of the recursive nature of fractalization, any self-touching or self-crossing that occurs is sure to propagate with
each fractalization... approaching infinity at higher levels. But self -touching and self-crossing fractal curves are not
necessarily bad. In fact, some of the most interesting-looking fractal curves cross-over themselves excessively. And if you
are a fractal explorer, I encourage you to fish for whatever strikes your fancy. But there is an intellectual - and in a certain
way, aesthetic - satisfaction in finding fractal curves that are well-behaved. Also, finding them is a challenge - and we do
so love a challenge! So, the majority of my specimens are either self -avoiding or self -touching on their vertices.
The most exciting discoveries are the "FASS curves' 7 . "FASS" stands for space-Filling, self- Avoiding, Simple, and
self -Similar. I have already defined "Space-filling" and "self-avoiding". "Simple" means the curve does not cross itself,
and "self-similar" means that the curve appears the same at different magnifications and rotations. The recursive
operations used in Koch Construction, L-systems, and IFS insure self-similarity.
Now, there is a certain class of vertex self-touching I want to mention, in which the fractal curve touches itself at
every grid point within the area that it covers (except for the boundary). These are what I call the gridfillers. The dragon
curve and the 5-dragon that I showed you earlier are both gridfillers. They fill a portion of the square grid. They can be
described as "chunks of lattice" (in Mandelbrot's words). There are also many fractal curves that fill triangular grids, such
as the Ter-dragon (shown below, with its first eight teragons). It will be described in more detail later on.
43
Rounded Corners
Since the Ter-dragon is a " chunk of lattice", it is hard to see how the curve
sweeps through its body. To reveal the sweep of the curve, we can use
rounded corners (more specifically: beveled, or chopped-off, corners). At the right
is the Ter-dragon 7 s 6 th teragon, rendered with rounded corners.
For a triangle gridfiller, chopping off the corners makes them
hexagon-like rather than triangle-like. The 9-segment generator shown below
lives in the square grid; chopping off its corners makes them octagon-like
rather than square-like.
You will notice that many of the specimens in this book have curly lines, and
that the curls appear to be self-avoiding. That is because I have rendered
them with rounded corners. So, don't get confused if you think you are
looking at a specimen that is a self-a voider! To make sure it is clear, the
diagrams always specify if a teragon is drawn with rounded corners.
Splines
Some of the high-resolution renderings of curves in this book employ
splines, which are even smoother than the chopped-off corners used in
the diagrams. The picture at right shows an example of a fractal curve
whose sharp corners normally touch each other. Splines help to
separate these touch points, and they also give the curve a smooth
organic contour.
44
How Long is a Fractal Curve?
Good question! Here's the answer: Infinite. And here's why: whenever you fractalize a teragon, you multiply its overall
length by some constant value which is greater than 1. You may have heard Mandelbrot's famous question, "How long is
the coast of Britain?" Well, it depends on whether you are measuring it with the flight of a jet plane, the mileage recorded
from a car ride, or the meandering of a crab crawling along the shore. Since a true Platonic fractal has an infinite number
of fractal levels of self-similarity, the length essentially becomes infinitely long (even though it still occupies a finite area)
This is illustrated below with the Dragon of Eve. This fractal curve's length is multiplied by -1.707 at each level.
8.492
1.707
14.497
2.914
4.974
24.748
42.242
,00
,
I
/
J
i
a/
•
45
Per-Tiling, Rep-Tiling, and Penrose Tiling
Since a fractal curve is made of smaller copies of itself, it logically follows that a plane-filling fractal curve is a filled-in
shape that is made of smaller filled-in shapes - identical to itself. This means that plane-filling fractal curves are tiling.
Not only are they tiling, but they are recursively tiling. Mandelbrot called this "pertiling" (using the prefix "per" as in
perfume: to thoroughly fill with fumes). These tiles are also examples of "rep-tiles". A rep-tile is a plane figure that tiles the
plane and can be divided into several smaller copies of itself. Some examples are shown below at left. At right are
pertilings (fractal rep-tiles) of a specimen I will show you later.
E
FS
&
Ksa
u
Some fractal explorers, such as Tom
Karzes [11], have designed pertilings that
are a-periodic, called "Penrose Fractals".
This means these tilings can extend out
forever and never repeat the same
pattern. One of Tom's designs is shown
at right. Penrose Fractals are further
described by Bandt and Gummelt [1],
andGelbrich[8].
t^
46
When I put two related fractal specimens together like puzzle pieces, I like to use the term pertiling - especially if they
have wild fractal boundaries. Sometimes I refer to this as "mating". Why? Because only specimens of similar species can
fit together. You'll see as we meet the different families of plane-filling curves that each family has its own particular type
of morphology. Below are two related specimens mating. The ends of their curves touch at the bottom of the image.
Okay, I believe we have covered enough of the basics now. In the pages that follow, I will be showing you more than 200
specimens of plane-filling curves. I have decided to leave some of the remaining interesting concepts for later, as they
come up in relation to the various specimens. There's a lot more to look at and a lot more to think about.
Let the fractalizing begin!
47
Gallery of Specimens
For the sake of completeness I will start with the simplest specimen of all: a non-fractal curve consisting of a straight line.
Its fractal dimension is 1, and its interval length is 1. 1 will use this as an introduction to the diagrams used throughout the
book. In this diagram, the header bar at the top shows the name of the fractal at the left (although many don't have
names). To the right of that are the interval length (expressed as a square root) and the fractal dimension. Below the
header bar at the left is some information about the genetics of the fractal generator. This includes the grid type (not
relevant in the case of this single line), and the number of segments. Below that is a list of numbers that specify the
segments in the generator. Each line segment in the generator is specified using four numbers. The first two numbers
specify its displacement within the grid. In this example, the line extends one unit in the x direction and units in the y
direction, and so the numbers are 1 and 0. The third and fourth numbers describe the segment's flippings. I will explain
that next.
single line (non-fractal curve)
interval length
= VT
fractal dimension =
No grid
1 segment
segment values:
1, 0, 1, 1
w
level 2
generator
level 3
48
Segment Flippings
Remember the four flipped variations of the turtle I showed you earlier? These four kinds of flippings are represented in
the third and fourth numbers. So: 1, 1 means no flipping; -1, 1, means it is flipped in x; 1, -1 means it is flipped in y; and -1,
-1 means it is flipped in both x and y. Now let's look at an L-shaped generator with no flippings. It creates a fractal
known as the Levy C-curve:
J
This in an interesting fractal curve - in a gnarly kind of way. Now, consider what happens when we try a few different
flippings among these two segments. Take note of the subtle difference in flippings here:
(■
"1,-1 Li
A 1,1 «i,-i w
Quite different results, eh? There are in fact 16 different possible ways to flip these two segments (since each of the two
segment can be flipped four ways: 4 2 = 16). Here are the fractal curves that result from all possible flippings:
49
B
D
In the graph, I have labeled the rows A, B, C, D, and the columns 1, 2, 3, 4. Notice the diagonal symmetry mirrored along
the axis that stretches from top-left to lower-right (Al, B2, C3, D4). Also notice the four boxes arranged along the opposite
50
diagonal (A4, B3, C2, Dl). They specify the only well-behaved fractal curves of this family. And they happen to be
gridfillers. You can see that the well-behaved fractal curves come in two forms (which I will introduce shortly). Two of
them are simply flipped versions of the other two, and so we conclude that there are really just two plane-filling curves of
this family, which I call the V2 family.
The four flippings in the upper-left corner all result in the Levy C-curve. And the four curves in the lower right
corner all result in Cesar o's Sweep, which is a double density gridfiller, meaning, it is everywhere self -touching along its
edges. Here is a diagram showing the fractalization of the L-shaped generator to create Cesar o's Sweep:
eE£
A
The fractal curves located at A3, B4, CI, and D2 are
quite misbehaved: they cross over themselves and
they leave lots of holes in the process. This is not to say
that they are uninteresting. In fact, as a nod to all the
misbehaved fractal curves in the world (which is most
of them) I shall offer a portrait of the fractal curve at
CI... here.
The fractal curves that self-cross or self-touch
can be considered as creatures that have reinforced
regions in their bodies. The density of the fabric of
their flesh is uneven - some spots are thick - other
spots have holes. Although they may lack the aesthetic
elegance of plane-filling curves, they often do exhibit
some interesting forms of self-similarity, and they
evoke familiar forms in nature.
51
It is time to officially introduce the first family of fractal curves: the V2 family. The first specimen I will show you is
perhaps the most famous one of all: the classic dragon curve. Mandelbrot called it the "Harter-Heighway Dragon", after
two mathematicians who explored it. It is sometimes referred to as the "Jurassic Park Dragon". For convenience, I will just
call it the "HH Dragon". The other plane-filling curve of the V2 family is the Polya Sweep. Such a very different fractal! In
fact, if we continue to fractalize these two curves to high-level teragons, the HH Dragon becomes increasingly craggy
along its boundary, while the Polya Sweep becomes increasingly straight along its three sides. What's up with that?
Classic Harter-Heighway Dragon Curve
interval length = V2~
fractal dimension = 2.0
Square grid
2 segments
segment values:
1: 1, 0, 1, 1
2: 0, 1,-1,-1
generator
level 2
level 9 (rounded corners)
Polya Sweep
interval length = VT" fractal dimension = 2.0
Square grid
2 segments
segment values:
1: 1, 0, 1,-1
2: 0, 1,-1, 1
generator
level 2
level 9 (rounded corners)
52
The next family of plane-filling fractal curves is the V3 family. Unlike the fractal curves of the V2 family, these curves live
in the triangular grid. Now I need to explain one aspect of my notation for fractal generators in the triangular grid. Look
at the illustration below:
segment values:
1, 0, 1, 1
0, 1, 1, 1
1,-1, 1, 1
1, 0, 1, 1
^ —
_l\_
>
N
The segment values at left specify the directions that the four Koch curve segments are drawn. These values are pretty
straightforward when applied to a square grid, but not so much when applied to a triangular grid. In order to use a
consistent scheme for specifying segment directions in both girds, I specify all values as if they were in the square grid. So,
for instance, the Koch curve is shown above with the following values: (1, 0) (0, 1) (1, -1) (1, 0). Since the Koch curve is a
member of a triangular grid family, all of its segments have two transforms applied to them: a skew (notice that the top of
the graph is shifted to right) and a scale (notice that the height of graph is squashed). These transformations result in grid
lines that cross at 120 and 60 degree angles instead of at 90 and 45 degree angles.
Please keep this in mind whenever
you are reading the segment values for
generators in the triangular grid. To make it
easier, I have drawn another picture at right.
It shows six direction values (colored blue),
which are mapped from the square grid to
the triangular grid.
53
Here is a question regarding the triangular grid: look at the picture below. How many unique 3-segment paths can you
draw from point A to point B?
How many unique
3-segment paths
can you draw to
connect A and B?
As you can see, there are six ways to connect A to B using 3 segments of length 1. But in fact there are really only two, if
you consider the fact that all of them are just rotations or reflections of the two examples highlighted at the top. We can
ignore the rest of them because, as fractal generators, their teragons look exactly the same as the teragons of these two,
just that they are rotated or reflected. Now, given these two generator shapes, consider the various ways that each of their
segments can be flipped: since each segment has exactly four possible kinds of flippings, we can conclude that the number
of possible flipped variations of each of these paths is:
4 3 = 64.
Thus, there are 128 curves to test for plane-filling (64 for each of the two paths shown in the illustration). I have tested
these and have found that there are ten plane-filling curves of the V3 family. One of them may already be familiar to
fractal fans: the Ter-dragon:
54
Ter-Dragon
interval length = VT~
fractal dimension = 2.0
Triangular grid
3 segments
segment values:
1: 0, 1, l s 1
2: 1,-1, 1, 1
3: 0, 1, 1, 1
A/ i
■
>
[\
/ V
generator
1 ^N
level 2
level 6
(rounded corners)
Famed computer scientist Donald Knuth is said to have first discovered the Ter-Dragon. Unlike the HH Dragon, the Ter-
Dragon has point-symmetry: its tail looks like its head... which looks like its tail. Notice also that three copies of the Ter
Dragon can be combined to make a larger one. But no surprise there, right? This fractal curve just oozes with three-ness.
The box at the lower-right shows how the Ter-Dragon can tile the plane.
The Ter-Dragon is our first example of a "Palindrome Curve", that is, a fractal curve which is symmetrical about its
center. Palindrome Dragons have heads that look like upside-down copies of their tails. I'll be showing you more
interesting properties of Palindrome fractals later on.
55
Based on the Ter Dragon's generator, we can create an entirely different palindrome curve simply by flipping each of the
segment x values, as shown here:
Inverted Ter-Dragon
interval length
= vr
fractal dimension =
Triangular grid
3 segments
segment values:
1: 0, 1,-1, 1
2: 1,-1,-1, 1
3: 0, 1,-1, 1
A/
<1
,
<
/ V
generator
»> J
level 2
[>
level 6
(rounded corners)
This simple flip changes the resulting fractal curve from being fat in the middle to having a pinched waist. I call it the
"inverted Ter-Dragon". Below is yet another variation attained from different flippings of the Ter-Dragon segments. In
this case, the first and third segments have their x values flipped. It is hard to predict the outcome of these small
changes. . .and you would probably not have guessed that the result would be a curve that completely fills a rectangle!
interval length =
-VT
fractal dimension
Triangular grid
3 segments
segment values:
1: 0, 1,-1, 1
2: 1,-1, 1, 1
3: 0, 1,-1, 1
A/
o<
S*
/ V
generator
level 2
>
level 6
(rounded corners)
Just ONE flipped number. That's all it takes to transform a craggy-edged butterfly into a box.
Now let's look at the other kind of path that can connect point A to point B. This one can produce seven unique
plane-filling fractal curves. They are shown on the following pages.
56
interval length = VT~ fractal dimension = 2.0
Triangular grid
3 segments
segment values:
1: 0, 1,-1, 1
2: 0, 1,-1, 1
3: 1,-1, 1,-1
generator
level 2
level 7
interval length = VT~ fractal dimension = 2.0
Triangular grid
3 segments
segment values:
0, 1, 1, 1
0, 1, 1, 1
1,-1,-1,-1
generator
level 2
level 6 (rounded corners)
interval length
vr
fractal dimension = 2.0
Triangular grid
3 segments
segment values:
S 1, 1,-1
0, 1,-1, 1
1,-1, 1,-1
generator
level 2
level 7
57
interval length = VT~ fractal dimension = 2.0
Triangular grid
3 segments
segment values:
1:
0, 1, 1,-1
2:
0, 1,-1, 1
3:
1,-1,-1, 1
generator
level 2
level 7 (rounded corners)
interval length = VT~ fractal dimension = 2.0
Triangular grid
3 segments
segment values:
0, 1,-1,-1
0, 1, 1, 1
1,-1, 1, 1
generator
level 2
level 7 (rounded corners)
interval length
vr
fractal dimension = 2.0
Triangular grid
3 segments
segment values:
1:
0, 1, 1,-1
2:
0, 1,-1, 1
3:
1,-1, 1, 1
VtfAYfiVtVtVitYriVtiViViV
generator
level 2
level 7 (rounded corners)
58
Yin-Dragon
interval length
= VT~ fractal dimension = 2.0
Triangular grid
3 segments
segment values:
1: 0, 1, l s 1
2: 0, 1,-1,-1
3: 1,-1, 1, 1
generator
level 2
r>
level 7 (rounded corners)
o
Check it out: the fractal curve above can be combined with another copy of itself that is rotated 180
degrees. When they are joined together they create two intertwined halves of a double-sized Ter-dragon!
The more times the teragons are fractalized, the more tightly the handshake in the middle spirals inward.
It reminds me a yin-yang symbol. And so, I call it the Yin Dragon. The two previous specimens are also
shown at the bottom, as yin-yang pairs.
The Yin Dragon was also discovered
by Tom Karzes [11], who called it
"Half-TerDragon". He created the
following cool pertilings:
iffi§
1
mm
mm
59
Now we come to the V4 square grid family. Let's return to the Koch Curve, which has four segments. If we morph the
Koch generator, progressively sharpening the triangle bump in the middle, causing the first and fourth segments to come
closer, the fractal dimension of the resulting curve will approach 2.
When the transformation is complete, the interval length is 2, and the second and third segments of the generator become
a two-sided needle pointing upward. This is a variant of Cesaro's Sweep that I showed you earlier. It is a twice-dense
gridfiller: it is self-touching among all segments (except for the segments that lie on the bottom edge).
Cesaro's Sweep interval length = V4~ fractal dimension = 2.0
Square grid
4 segments
segment values:
1
4
1, U, 1, 1
0, 1, 1, 1
U,-l, 1, 1
1. 0. 1. 1
4
f
r :
n
m w
rr
T1
generator level 2 level 5
60
Wolter Schraa [21] created a nice artistic image showing the transition of a curve from dimension 1 to dimension 2. A
Koch Curve-like region emerges just after the middle area, and at the very end, it closes up to form the characteristic
folding of Cesar o's Sweep. Here is an altered version of Schraa' s image:
Now, back to a familiar question: in a square grid, how many ways can you draw four connected lines of length 1 from
point A to point B, without having them self-contact? (Not counting rotations and mirror-images). The answer is 2:
□
»
B «
1
pl. m
Now, let's start with the first generator above (the square bump with a level segment to its right). How many plane-filling
curves can we find using various flippings of this shape? Well, let's rule out a few curves that are already represented by
the V2 family: the HH Dragon and the Poly a Sweep. Observe that the level 2 teragons of the V2 family have the same
shape (only rotated and flipped). Thus, transformed replicas of the V2 curves can be generated with this shape.
61
Besides these exceptions, I have discovered three unique plane-filling curves of the V4 square grid family. The first one,
shown below, fills a rectangle that is tilted 45 degrees. It is a partially self-touching curve: many parts of the curve are self-
touching at their vertices, but the rest of the curve is self-avoiding. It is shown below at level 6, tilted 45 degrees, with
colored bars where there are gaps longer then a specific length. Can you describe the pattern of these gaps?
interval length = VT"
fractal dimension = 2.0
Square grid
4 segments
segment values:
0, 1,-1, 1
1, 0, 1, 1
0,-1,-1,-1
1, 0, 1,-1
generator
level 2
level 5 (rounded corners)
62
These next two curves are curious indeed. They appear to have variations on a similar motif.
interval length = V4~ fractal dimension = 2.0
Square grid
4 segments
segment values:
1: 0, 1, 1,-1
2: 1, 0,-1, 1
3: 0,-1, 1,-1
4: 1, 0,-1, 1
^
1
^
generator
level 2
level 5 (rounded corners)
interval length
= vr
fractal dimension = 2.0
4
}uare grid
segments
;gment values:
0, 1,-1, 1
1, 0, 1,-1
0,-1,-1, 1
1, 0, 1,-1
level 5 (rounded corners)
]
"
k
w
r
w
generator
level
2
The second specimen is shown at right, pertiled four times, to make a square.
63
Now I'll show you the other curve that can be made using the other path from A to B that I showed. Mandelbrot included
it in his book, and attributed it to Peano, calling it the "Peano Sweep". It is self -touching along some proportion of its
edges. This is apparent at level 2.
Peano Sweei
interval length = V4~
fractal dimension = 2.0
Square grid
4 segments
segment values:
0, 1,-1,-1
1, 0, 1, 1
1, 0, 1, 1
0,-1,-1,-1
generator
level 2
level 5 (rounded corners)
For curves that are self-touching on
edges, I sometimes use a different
technique than rounded corners. In
this case, I use a simple low-pass
smoothing filter. Basically, after the
points of the curve have been
calculated, I adjust the position of
each point to equal the average of
the positions of itself plus its two
neighbors. This has the effect of
separating the edge-adjacencies,
allowing space around the curve to
breathe. Did you notice a similarity
in the inner pattern to an earlier
specimen of this family?
-• f
J L
1 1 1— •
64
Peano Sweep
(edge-replacement)
Hilbert Curve
(node-replacement)
2
3
1
i —
4
— i
- 4
2 3 2 3
> » • * 1
i i • « 1
^— —* i ■
After applying this technique to make the curve breathe, I
noticed a similarity to higher-level fractalizations of the
Hilbert Curve, which we met earlier. And indeed, there is
a direct correlation. The Peano Sweep is basically a Koch-
constructed variation of the Hilbert curve, using edge-
replacement instead of node-replacement. Notice that in
both cases there are four tiling squares.
In the second teragon, we see that the scaled-down copies
of the generators that are applied to the two bottom
squares are pointing inwards. The copies of the generators
applied to the top two squares remain pointing upward, in
their original orientations. As I pointed out before, node-
replacement requires extra connective lines, shown here in
pink.
Also, notice that after several levels of fractalization, these
curves start to look more similar (when using the
smoothing filter technique on the Peano Sweep). Check
out the main artery extending upward from the middle of
the bottom, which is more noticeable on the Peano Sweep.
There are also several secondary arteries - all of which
correspond to the cascade of transformations used to
generate the curve.
(rounded corners)
65
A New Slant on Fractal Dimension
Now it is time to explain a new aspect of fractal dimension, which wasn't necessary until now. Consider the illustration
below. The shape at left has three segments, but the slanted one is longer than the others. Its length is V2, while the other
segments have length 1. Now here's a trick: if each of these lengths are squared, and then summed, the result is 4.
2+ 1 +1=4
V2>
\y
1
■
1
*
Might this generator create a curve that qualifies as a member of the V4 family? Can a curve of the V4 family with only 3
segments fractalize to a plane-filling curve? Well, let's revisit the equation for fractal dimension: log N / log L. Now,
instead of N representing the number of segments in the fractal generator, let's re-define N as: "the summed squares of all
the segment lengths". Up until now, all the generators so far have had segment lengths of 1, and since VI = 1, we could
just refer to the number of segments. But now, we will change the definition of N to accommodate segments lengths
greater than 1. And behold: the generator I have just showed you, given just the right flippings, results in a fractal curve
that looks like the HH Dragon (but not quite! - look more closely). I call it VI Dragon.
V1 Dragon
interval length = Va~
fractal dimension = 2.0
Square grid
3 segments
segment values:
1: 1, 1, 1, 1
2: 1, 0,-1,-1
3: 0,-1, 1, 1
/\
level 7 (rounded corners)
generator
f
i
' /\
9
level 2
66
Notice that some of the blobs are bigger than others. That is because of the difference in lengths among the segments,
which cascade into many different sizes. The longest segments appear to be at the left-bottom (at the start of the curve).
This is related to the fact that the first segment in the generator is the longest.
But is it Plane-filling?
You might not think this a plane-filling
curve, because of all these conspicuous
blobs of different sizes. But remember that
this curve (and in fact every curve in this
book) has a limited fractal level. If we
were to fractalize this curve to infinity, all
of the curls would accumulate and close
up to completely fill the shape.
BUT... even at infinity, would the density
still not be uniform throughout the shape?
I shall leave this as an open question for
you to ponder.
Now let's try a different flipping of this shape. Lo and behold, the resulting fractal curve looks quite different indeed.
interval length = Va~
fractal dimension = 2.0
Square grid
3 segments
segment values:
1: 1, 1,-1,-1
2: 1, 0, 1, 1
3: 0,-1, 1, 1
level 2
level 7
w
/ ,
/
generator
r
\
67
This fractal curve is special. It is not too often that I find fractal curves that are self-avoiders. Well, this one is! Let's see it
enlarged a bit, and with some cool coloring added. By the way, this curve appears to also have been discovered by artist
Victor Carbajo [3].
And here's an interesting fact: if you detach the section at the lower-left, and rotate it 90 degrees, pivoting about
the bottom corner, it fits snuggly into the remaining hole. Not only that, but it turns the curve into a closed loop. On the
next page, I show this process, and then I show what it looks like with the interior of this closed loop filled with a solid
color.
68
69
Below are two other generators that have a segment length of V2.
interval length = V4~
fractal dimension = 2.0
Square grid
3 segments
segment values:
1: 1, 1,-1, 1
2: 0,-1,-1,-1
3: 1, 0, 1, 1
generator
level 2
level 5 (beveled corners)
interval length
= vr
fractal dimension =
Square grid
3 segments
segment values:
1: l s l s l s 1
2: 0,-1, 1, 1
3: 1, 0,-1,-1
A
f
N/
\
level 5
(rounded corners)
generator
■^
level 2
V ^
Look familiar? Given a specific generator shape, one set of flippings results in a right triangle while the other results in a
dragon (I call this one the V2 Dragon).
Both of these fractal curves are partial gridfillers: Some of their vertices touch and some don't. This makes for
some interesting internal patterning, as shown on the next page.
70
There are two more generators of this family that have a segment length of V2. Here's one of them:
interval length = Va~
fractal dimension = 2.0
Square grid
3 segments
segment values:
1: 0, 1, 1, 1
2: 1,-1,-1,-1
3: 1, 0, 1, 1
generator
level 2
level 6
On the next page it is shown enlarged at a higher level, and with rounded corners, so you can appreciate its meandering
path.
71
Finally, I want to show you a member of the V4 square family, which I am especially proud of. I call it the "Dragon of
Eve". It is named after Eve Peters, who was my mother's Art teacher in High School, and whose house I stayed at in my
first semester in graduate school. I discovered it while living in her house.
The Dragon of Eve is a self-avoiding fractal curve. Here it is:
72
Dragon of Eve
interval length = VT"
fractal dimension = 2,0
Square grid
3 segments
segment values:
1: S 1, l s 1
2: 1,-1, 1, 1
3: 1, 0,-1,-1
generator
level 2
level 6
Here it is enlarged at a higher level. This drawing uses a technique in which line thickness is proportional to line length.
This curve reminds me a bit of the Great Wave of Kanagawa, by the Japanese artist Hokusai.
73
Since V4 = 2, and since square grids and triangle grids share common grid points along an axis (the horizontal "floor" of
the two grids), you may suspect that there exists a family of V4 plane-filling curves that live in the triangle grid. Indeed I
have discovered what I believe to be all of them.
But before I show you these plane-filling curves, I would first like to show you a member of the V4 triangle grid
family that is not plane-filling: its fractal dimension is -1.5849625, and it generates the famous Sierpinski Arrowhead
Curve. It is identical to the Sierpinski Triangle (a solid triangle with its center triangle cut A A A A
out, and then with the center triangles cut out of the remaining three, and so on)...
A
■AAA
▲AAA AAAA AA
Serpinski Arrowhead Curve
interval length = VT"
fractal dimension = 1.5849625
Triangular grid
3 segments
segment values:
1: 0. 1. 1,-1
2: 1, 0, 1, 1
3: 1,-1, 1,-1
\
generator
level 2
level 7 (rounded corners)
When you fractalize the Sierpinski Arrowhead Curve, it converges toward
the Sierpinski triangle. At each stage, it accumulates bays and peninsulas,
which approach each other, getting closer and closer.... but never touching.
So in fact this is a self -avoiding curve.
A
74
I was delighted when I discovered a curve that actually creates a. family of Sierpinski curves] In the diagram below, I show
this curve fractalized to level 6. Daddy Sierpinski sits proudly to the left, with Mommy Sierpinski to his right. To her
right is daughter Sierpinski, followed by little brother Sierpinski, and then baby Sierpinski, and finally, the family pet:
Turtle Sierpinski.
Serpinski Fa mi
iy
interval length =
= vr
fractal dimension
Triangular grid
3 segments
segment values:
1: 0, 1, 1,-1
2: 1,-1,-1,-1
3: 1, 0, 1, 1
A
w
level 2
A
generator
level 6
(rounded corners)
Here is a higher-level rendering of the Sierpinski family fractal curve, with some extra members of the family to the right
of the pet turtle (I leave it to you to imagine who are the tiniest members of this family).
75
Now it's time to look at the plane-filling members of the V4 triangle grid family. I will start with one that requires no
flippings in its segments. Here it is. It happens to be a palindrome:
interval length = VT" fractal dimension = 2.0
Triangular grid
4 segments
segment values:
1: 1,-1, l s 1
2: 0, 1, 1, 1
3: 0, 1, 1, 1
4: 1,-1, 1, 1
/
7
generator
level 2
level 5
76
This fractal curve is a gridfiller, but it has a wild boundary, which has a high fractal dimension of its own. Not only that:
the boundary touches itself. This fractal makes the notion of "plane-filling" very fuzzy (so to speak) because the region of
the plane that it fills is scattered haphazardly. All the filled-in areas of fully fractalized curves that we have seen before
this one had boundaries that were either straight lines or else they were fractal curves of their own... but never self-
touching. Now get ready; here is that same generator with some different flippings. Its boundary is so amazingly self-
touching, you might call it "self-enveloping" (but it is NOT self-crossing, as revealed by rendering it with rounded
corners).
interval length = V4~
fractal dimension = 2.0
Triangular grid
4 segments
segment values:
1: l.-l, 1,-1
2: 0, 1,-1, 1
3: 0, 1, 1,-1
4: 1,-1, 1,-1
generator
level 2
level 4 (beveled corners)
When highly fractalized, this curve becomes a parallelogram filled with a cacophony of triangles.
77
Here is that same generator with yet another set of flippings.
interval length = V4~
fractal dimension = 2.0
Triangular grid
4 segments
segment values:
1: 1,-1,-1, 1
2: 0, 1, 1, 1
3: 0, 1,-1, 1
4: 1,-1,-1, 1
_A
generator
level 2
level 5
Now here is a different generator of this family. This curve is highly self-enveloping.
interval
length
= vr
fractal dimension = 2.0
Triangular grid
4 segments
^
,
A
S
ImS
<&**$ga&
sc
4
;y NltMl L VdlUCi.
0, 1,-1, 1
0, 1, 1,-1
1,-1,-1, 1
l.-l. l.-l
V
|3^^3BF^
\
v
/ \
\
/
^1
W-^J^^L^
/ \
\
%$fP*^ kdsEr
generator
level 2
level 6 (rounded corners)
On the next page is a picture showing two copies of this curve... mating. They are engaged in the most intimate embrace
one can imagine.
78
79
Here is the same generator shape with alternate flippings. This curve is very different. Every family has its token dragon
curve - some of them are more dragon-like than others. Would you call this a dragon. . .or a scorpion? Or a. . ..?
interval length = VT"
ractal dimension = 2.0
Triangular grid
4 segments
segment values:
1: 0, 1, l s 1
2: 0, 1,-1, 1
3: 1,-1, 1,-1
4: 1,-1,-1, 1
generator
level 2
level 5
80
Here is another curve based on the same generator shape. I have rendered it below with hierarchical coloring to indicate
the way nodes are formed: each node has 3-way symmetry and is connected to other nodes at pinch-points.
interval length = VT" fractal dimension = 2.0
Triangular grid
4 segments
segment values:
1: 0, 1,-1,-1
2: 0, 1, 1, 1
3: 1,-1,-1,-1
4: 1,-1, 1, 1
generator
level 2
level 4 (beveled corners)
81
The last members of the V4 triangle grid family I will show you are curves that exactly fill an equilateral triangle. They are
pseudo-gridfillers.
interval length = VT"
fractal dimension =
riangular grid
segments
;gment values:
1, 0, 1, 1
-1, 1,-1,-1
1. 0, 1, 1
w
level 4
(rounded corners)
4: 1,-1,-1,-1
,Y\
\
\
w
^Vv
g
anerator
level 2
You can think of each of the four segments of this generator as
being responsible for one of four sub-triangles. The precise set of
segment flippings is important, so as to avoid edge-touching.
Zbigniew Fiedorowicz [6] made a variation of this fractal -
shown below.
A
82
Two variations are shown here, and at the bottom of the page is a portrait of all three variations at level 4.
interval length = V4~
fractal dimension
Triangular grid
4 segments
segment values:
1: 1, 0,-1, 1
2: -1, 1, 1,-1
3: 1, 0,-1, 1
4: 1,-1, 1,-1
level 2
^.
level 4
(beveled corners)
X\
generator
interval length = VT" fractal dimension =
riangular grid
segments
;gment values:
1, 0, 1, 1
-1, 1,-1,-1
1, 0, 1, 1
1,-1, 1,-1
w
Jk
vX\
\
\
aaa
JVV
generator
w
level 2
level 4 (beveled corners)
83
Now we come to the V5 family. We have already met the 5-dragon:
5-Dragor
interval length = Vs~
fractal dimension = 2.0
Square grid
5 segments
segment values:
1: S l s l s 1
2: 1, 0, 1, 1
3: 0,-1, 1, 1
4: 1, 0, 1, 1
5: S 1, 1, 1
generator
level 2
level 4 (rounded corners)
Remember how I flipped the x values of all the segments of the Ter-Dragon to make the Inverted Ter-Dragon? Well, the
same can be done with the 5-Dragon. And, just like the inverted Ter, the inverted 5-Dragon has a pinched waist.
Pinched 5-Dragon
interval length = VT~
fractal dimension = 2.0
Square grid
5 segments
segment values:
0, 1,-1, 1
1, 0,-1, 1
0,-1,-1, 1
1, 0,-1, 1
0, 1,-1, 1
generator
level 2
level 4 (rounded corners)
84
This next specimen is Mandelbrot's Quartet: "Each 'player', and the table between them, pertile." [16]. He
claims to have "designed" it, although one could debate that such a curve is "discovered" rather than
"designed". In either case, it is one of the finest self-avoiders.
Quartet
interval length
= vr
fractal dimension
Square grid
5 segments
segment values:
1: 0, 1,-1,-1
2: 0, 1, 1, 1
3: 1, 0, 1, 1
4: 0,-1,-1,-1
5: 1, 0, 1, 1
w
w
4
level 2
a
level 4
J
4
r
generate
r
I discovered a variation of this generator, created by reversing the x-f lipping of each segment. I call it "Inner-flip Quartet".
Inner-flip Quartet
interval length
= vr
fractal dimension =
}uare grid
segments
;gment values:
0, 1, 1,-1
0, 1,-1, 1
1, 0,-1, 1
0,-1, 1,-1
1, 0,-1, 1
^
4
level 2
i\ ■
level 4
>
\
^
generate*
r
Next I will show you six variations on a single generator shape. Two examples are shown on the next page. The first
example has an interesting property: due to the flippings, the orientations of copies of the generator do not correspond
with a continuous square grid. You can see this in the mixture of 90 and 45-degree angles in the level 2 teragon. I would
not have expected a curve like this to survive the fractal test. There is indeed self-contacting in several vertices, but other
than that, it is rather well-behaved, as indicated by rendering with rounded corners.
85
interval length
= vr
fractal dimension = 2.0
quare grid
segments
;gment values:
0, 1, 1,-1
1, 0, 1, 1
0, 1,-1,-1
1, 0,-1, 1
0,-1,-1,-1
^
level 2
level 3 (rounded corners)
w
f
4
generator
A close relative of this curve is shown here.
interval length
= vr
fractal dimension = 2.0
Square grid
5 segments
^P
segment values:
\\C^
1
0, 1, i s -i
1, 0, 1, 1
^
u^m
k
0, 1, 1,-1
K-X^^fKJ
l s 0,-1, 1
*^0 rrA) L-n
0,-1, 1,-1
w
^
<w^
k
<^
enerator
level 2
level 3 (rounded corners)
These two specimens resolve to the same general shape, as indicated by the illustration below.
86
Given the same generator, with alternate flippings, we get two gridfillers with very craggy boundaries:
interval length = V5~ fractal dimension = 2.0
^uare grid
segments
;gment values:
0, 1, 1, 1
1, 0,-1,-1
§^%
0, 1,
1, o,
0,-1,
-1,-1
1, 1
^
, 4|J> ^
>
) gener*
rtor
level 4 (rounded corners)
interval length = Vs~
fractal dimension = 2.0
Square grid
5 segments
segment values:
0, 1,-1, 1
1, 0, 1,-1
0, 1,-1, 1
1, 0, 1,-1
0.-1,-1, 1 ^
generator
level 4 (rounded corners)
With other changes in flippings, we get the following gridfillers:
interval length = V5~ fractal dimension = 2.0
^uare grid
segments
;gment values:
0, 1, 1,-1
1, 0,-1, 1
^
%
0, 1,
1, o,
0,-1,
1,-1
-1, 1
1,-1
k
>
%Wp
generato
level 4 (rounded corners)
interval length = Vs~
fractal dimension = 2.0
Square grid
5 segments
segment values:
0, 1,-1,-1
1, 0, 1, 1
0, 1,-1,-1
1, 0, 1, 1
0,-1,-1,-1
generator
In that last one, notice how the conifer tree-like spike at the upper-right corresponds to the empty gap at the bottom,
rotated by 90 degrees. My brain is pertiling!
87
Here are two plane-filling curves of the V5 family that use a common generator shape.
interval length = Vs~
fractal dimension = 2.0
Square grid
5 segments
^\
;gment values:
0, 1, 1,-1
0, 1,-1, 1
1, 0, 1,-1
1, 0,-1, 1
0,-1, 1,-1
^
o?
v 1
>
<
^
generator
level 2
level 4 (rounded corners)
interval length
= vr
fractal dimension = 2.0
Square grid
5 segments
;gment values:
0, 1, 1, 1
0, 1,-1,-1
w
^
1, 0, 1, 1
1, 0,-1,-1
0,-1, 1, 1
f
f
4
generator
level 2
level 4 (rounded corners)
That last curve can be combined with a
180-degree flipped copy of itself to make
the shape of the 5-Dragon. . .
This next curve is a self-avoider. It is followed by a similar specimen.
interval length
= vr
fractal dimension = 2.0
Square grid
5 segments
segment values:
1: 1, 0, 1,-1
2: 0, 1, 1,-1
3: 0, 1,-1, 1
4: 1, 0,-1, 1
5: 0,-1,-1, 1
^
k
level 2
level 4 (rounded corners)
1
y '
generate
r
interval length = VT" fractal dimension = 2.0
Square grid
5 segments
segment values:
1
2
3
4
5
1, 0,-1,-
0, 1,-1,-
0, 1, 1,
1, 0, 1,
0.-1. 1.
generator
level 2
level 4 (rounded corners)
Each of these last two curves can be copied four
times - each copy rotated 90 degrees - and
joined together to make a continuous curve. The
overall shape is a replica of the Quartet (one of
them is a mirror-image of the other). This
appears to be a property of many V5 curves I
have shown.
89
There are no J6 plane-filling curves within my scheme! Why? Well, I can tell you this: it has something to do with the
grids. Here's that illustration I showed you earlier:
r
A
©-
/
V3"
/
\
Vio
V13"
V9"
ongin y7" ^~
An uninspiring answer to the question (why no ^6?) is that there are no grid points on either a square or triangular grid
whose distance to the origin is V6. 1 could just leave it at that, and say "let's move on", but I seek a deeper answer. Notice
also that there is no square root of 11 distance either. There is also no square root of 14 distance. The list continues in a
way that is reminiscent of the erratic series of prime numbers.
In the case of the square grid, the answer is simple: each of these distances is the sum of two squares. Look no
further than the Pythagorean theorem to see why this is so. But when considering the triangle grid, it is a little less
obvious why we should end up with the set: VI, V3, V4, V7, V12, V13, etc. I shall leave this question open for you to explore
on your own. Also, did you notice? ...there are two V13 distances - one on the square grid and one on the triangular grid.
What's up with that?
Now, I must admit: earlier I claimed that all plane-filling curves have interval lengths that fall between grid
points of either the square or triangular grids. But I cannot say for sure that this is true. It may be that any number of
generators with arbitrary interval lengths can yield plane-filling curves (although they may evade simple mathematical
analysis). I leave it up to you, dear reader /viewer /thinker, to give me an inspiring answer. You can always find me at
Tef f r ey @ Ventr ella . com . Okay, Fm afraid I am going to have to say, "let's move on now". . .to the awesome V7 family.
90
Now we can add a new specimen to the Ter Dragon and the 5-Dragon to make a nice neat trio of prime number
palindrome dragons. It is the 7 -Dragon. These three curves have a few things in common: (1) they are all palindromes; (2)
they require no segment flippings; (3) they represent the first three odd numbers (other than 1); and (4) they are all
gridfillers. One difference is that the 7-Dragon is rather fat compared to the other two, and it is not as rough around the
edges, so it may not qualify as a true "dragon". It also cannot be converted into a pinched-waist specimen by way of
flipping the x values of its generator segments. Clearly, the 7-Dragon has a bit of a weight problem. Here it is:
7-Dragoi
interval length = V7~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1, 0, 1, 1
-1, 1, 1, 1
1, 0, 1, 1
0,-1, 1, 1
1, 0, 1, 1
-1, 1, 1, 1
1, 0, 1, 1
5S
generator
level 2
level 3 (rounded corners)
I found a variation on the 7-Dragon generator that traverses the same
segments, only in a different order. The diagram at right reveals this
difference by way of rounding the corners of the generator. This
alternate 7-Dragon is shown on the next page.
91
interval length = V7~ fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1, 0,-1, 1
1, 0,-1, 1
-1, 1, 1,-1
0,-1,-1, 1
-1, 1,-1, 1
1, 0, 1,-1
1, 0, 1,-1
xzr
generator
_S
level 2
level 3 (rounded corners)
Here is a color rendering, with rounded corners, showing how the curve is a boundary between two domains:
92
Here is yet another variation on the 7-Dragon:
interval length = V?~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1, 0, 1, 1
1, 0,-1,-1
-1, 1,-1,-1
4: 0,-1,-1,-1
-1, 1, 1, 1
1, 0,-1,-1
1, 0, 1, 1
ES
generator
level 2
level 3 (rounded corners)
Now, here is a strange specimen. I wouldn't normally include a self-crossing fractal curve in this book, but this variation
on the 7-Dragon is irresistibly clever in it self-crossing:
interval length = V?~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1, 0,-1,-1
0,-1,-1
1, 1, 1
1,
-1,
4: -1, 0,-1,-1
1,-1,-1,-1
6: 0, 1, 1, 1
7: 1, 0,-1,-1
5S
generator
level 2
level 3 (rounded corners)
On the next page is a diagram that shows the progression of this fractal curve. As usual for a gridfiller (or, in this case a
self-crossing gridfiller) I render it with rounded corners. For this illustration, I filled-in parts of it with color, to show how
regions percolate into ever-complexifying domains.
93
Notice how the crossings accumulate with each level. In level 1 (upper-left) there is one crossing, which forms a closed
region shown in yellow. In level 2 (upper-right) there are 7 small-loop crossings that form closed regions colored in red,
and one larger-scale crossing (leftover from level 1, shown in yellow). In level 3 (bottom) there are 49 small-looped
crossings that form closed off regions colored in blue. The remaining yellow and red regions have become more
convoluted. I would assume that with each continuing level of fractalization, the remaining regions would stay
topologically whole yet more convoluted, and that the self-similarity of clusterings would continue at each level of detail.
94
Now it is time to visit one of the most famous plane-filling curves of all: the Gosper Curve, a truly splendid self-avoider.
Gosper Curve
interval length = V?~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
w
w
level 2
level 3
1
1, U, 1, 1
0, 1,-1,-1
-1, 0,-1,-1
-1, 1, 1, 1
1, 0, 1, 1
1, 0, 1, 1
1,-1,-1,-1
\ .
A
generator
The Gosper curve is named after William Gosper
[7]. It fills a roughly hexagonal region, which
Mandelbrot called "Gosper Island". The shape of
the Gosper Island will be popping up throughout
our exploration of this family. Here's one
example: three 7-Dragons can be combined to
form a shape of the Gosper Island.
95
It is a source of frustration for geometers that hexagons do not
tile recursively, like squares and triangles. In other words, they
are not rep-tiles. But the Gosper Curve defines a series of
seven tiling regions that are all similar to the whole. So it gets
around this problem... that is, if you don't mind having
hexagons with craggy boundaries.
Here is something I call the "Inner-flip Gosper". It has each of the x-values flipped, and so it creates a different character
to the way the fingers curl to fill up the Gosper Island. Counting up the fractal levels, the direction of the curl reverses.
Inner-flip Gosper
interval length = VT~
fractal dimension
Triangular grid
7 segments
segment values:
^ ^
level 2
level 3
1
0, 1, 1,-1
-1, 0, 1,-1
-1, 1,-1, 1
1, 0,-1, 1
1, 0,-1, 1
1,-1, 1,-1
^ A
„ /
generator
Gosper
Inner-flip Gosper
96
The diagram at the right was created by Fukuda, et. al [4] to show a
generalized scheme for constructing Gosper-like Curves. It can be
described as a triangular checkerboard, where each gray triangle stands
for a hexagonal tile. Now, keep these triangles in your mind as I show
you a variation of the Gosper Curve's generator that I discovered. I call it
"Anti-Gosper". Normally, the Gosper Curve is a happy self-avoiding
curve. But I have seen the Gosper Curve when it is in a bad mood. When
this happens, it flips three of its segments, causing its fractalized teragon
to become a shriveled-up triangle. The Anti-Gosper is edge-touching, in a
rather anti-social way.
Anti-Gosper
interval length = V7~
fractal dimension = 2.0
riangular grid
segments
;gment values:
1, 0, 1, 1
0, 1, 1, 1
-1, 0,-1,-1
-1, 1,-1,-1
1, 0, 1, 1
1, 0,-1,-1
1,-1,-1,-1
w
level 2
level 4
N >\
J
generator
Here is a diagram illustrating the transformation from Gosper to Anti-Gosper, where the checkerboard of triangles
collapses in on itself, leaving no gaps.
-* ^
5^
The Anti-Gosper essentially transforms the Gosper curve from a hexagon-like tiling fractal to a triangle-like tiling fractal.
97
The overall shape of the anti-Gosper can be created by another generator, shown here:
interval length = V?~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
0, 1,-1,-1
-1, 1,-1,-1
1, 0, 1, 1
0,-1, 1, 1
1, 0,-1,-1
0, 1, 1, 1
1,-1,-1,-1
generator
level 2
level 4
This specimen is shown below with rounded corners.
You can easily see that this plane-filling curve is self-
contacting in such a way that rounding the corners is
not sufficient to separate-out the touching parts.
However, it does make a fine jigsaw puzzle :)
98
Node Gosper
Remember the node-replacement curves
I showed you earlier? Well, after
discovering that any fractal tiling could
be used as the basis for a node-
replacement curve, I realized that the
Gosper curve would qualify. So here is a
picture I drew of a variant of the Gosper
curve, which I call "Node Gosper".
Instead of the segments of the generator
spanning between two corners of each
hexagonal tile, they connect at midpoints
of neighboring hexagonal tiles.
Just for fun, I did a drawing of
the second teragon of a node Gosper, and
rendered the connective tissue with pink
lines. Did you notice that fractal curves
generated with node replacement are not
strictly self-similar? The extra connective
lines create slight differences in the
internal shapes. In this example you can
see the slight variations among the
bumps. These variations accumulate
progressively with each teragon.
Gosper Curve Node-Gosper Curve
(edge-replacement) (node replacement)
99
The V7 family is genetically imbued with a talent for clever self -crossing. Let me show you another variation of a self-
crossing 7-dragon, followed by a colorful self-crossing Gosper Island made by combining three copies (below at left).
interval length = V7~
fractal dimension = 2.0
1, S 1, 1
Triangular grid
7 segments
segment values:
1:
2:
3:
4:
5:
6:
7:
1, 1, 1
0, 1, 1
-1, 1, 1
0, 1, 1
1, 1. 1
S 1, 1
5£
generator
level 2
level 3 (rounded corners)
I have just shown you several variations of the 7-
Dragon. Each generator visits the same seven grid
points, but they are each visited in a different order.
Below is a diagram of four ways that the seven
points can be visited. It uses the rounded (chopped-
off) corners to help with readability.
100
Here is a V7 gridfiller, with a distinctive hook. It looks a bit like the Yin Dragon I showed you earlier of the V3 family.
Below is a rendering, pertiled with a 180-degree flipped partner. The two mate to create a yin-yang 7-dragon:
Root 7 Yin
interval length = V7~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1,
1,
-1,
-1,
1,
1,
0,
0, 1, 1
0,-1,-1
1, 1, 1
1,-1,-1
0, 1, 1
0,-1,-1
■1, 1, 1
generator
level 2
level 4
^WW
aaJ
viM
/
/
/'S
y^.y
/»s*
/
bV^-A
/^A 1 .
/
*s
a/
vs*
/
\*s*/ w
\\A>\
Hr
", /-
y^y
/V^"
jS->S
ivV
101
The profile of the 7-Dragon is similar to that of the Gosper Island - that is: the fat middle-section. As I mentioned before,
the Gosper Island seems to pop up quite a bit in this family. Here is a curve that shows a bit of that profile (but only in
certain parts).
interval length = V7~
fractal dimension = 2.0
T
riangular grid
7 segments
segment values
1
0,-1, 1,-1
2
1, 0,-1, 1
3
1. 0, 1,-1
4
-1, 1,-1, 1
5
-1, 1, 1,-1
6
1, 0,-1, 1
7
1, 0, 1,-1
L
generator
level 2
level 4
Here is a curious specimen. The main part of its body looks like a Gosper Island, but it is partly-eroded. And right below
the eroded part is a 7-Dragon - tethered to its body.
Partia l Gosper Towing Dragc
interval length = VT~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
0, 1,-1
0,-1, 1
0, 1,-1
0,-1, 1
1, 1,-1
1,-1, 1
-1, 1,-1
generator
level 2
level 4 (beveled corners)
102
I discovered a variation of the specimen I just showed you. After careful analysis, I have concluded that this specimen had
made a valiant attempt to fill up the missing piece of its Gosper body. But unfortunately, it had spent too many of its
segments on its tethered 7-Dragon. And in its failed attempt to fill its Gosper body, it left a series of Gosper-like holes.
interval length = V7~
fractal dimension = 2.0
T
riangular grid
7 segments
segment values
1
1, 0, 1, 1
2
1, 0,-1,-1
3
1, 0, 1, 1
4
1, 0,-1,-1
5
-1, 1, 1, 1
6
~ll 1,-1,-1
7
0,-1, 1, 1
generator
level 2
level 4 (beveled corners)
Below at left is a rendering of this specimen with regions colored to illustrate the Gosper pieces. Now, do you want to see
what it looks like when two of these specimens mate? It is shown below at right. Don't try to wrap your whole brain
around this one - you might get a headache.
103
The Gosper profile shows up again in these two variations on one generator. They both have a rather jaggy inner-texture.
You can see in the level 2 teragon below that these shapes are still quite similar. But at level four, it becomes clear that the
second specimen has two spiraling hooks. This specimen is shown below with a few rep-tiling themes.
interval length = V7~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
£
level 2
level 4
1
1. 0,-1, 1
1, 0, 1,-1
1, 0,-1, 1
-1, 1,-1, 1
-1, 1, 1,-1
1, 0, 1,-1
, \
r
generator
interval length = VT~ fractal dimension = 2.0
T
riangular grid
7 segments
segment values
1
0,-1, 1, 1
2
1, 0, 1, 1
3
1, 0,-1,-1
4
1, 0, 1, 1
5
-1, 1, 1, 1
6
-1, 1,-1,-1
7
1, 0,-1,-1
u
generator
level 2
level 4
104
Gosper profile cleverness abounds: This specimen is pertiled 6 times to form a closed Gosper Island.
interval length = VT~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
0, 1, 1, 1
-1, 1, 1, 1
1, o, 1, 1
0,-1, 1, 1
1,-1, 1, 1
1, 0, 1, 1
0, 1, 1, 1
generator
level 2
Ievel3 (rounded comers)
105
The two specimens below create variations on a "Gosper Hill", covered with lush vegetation, shown below:
interval length = V? -
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
, 1,-1,-1
, 0, 1, 1
, 1,-1,-1
, 0, 1, 1
t 0, 1, 1
,-1,-1,-1
, 0, 1, 1
<"-
generator
level 2
level 3 (rounded corners)
interval length = V7~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1:
2:
3:
4:
5:
6:
7:
-1, 1, 1,-1
1, 0,-1, 1
-1, 1, 1,-1
l s 0,-1, 1
1, 0,-1, 1
0,-1, 1,-1
1, 0,-1, 1
v
r^
generator
level 2
level 3 (rounded corners}
106
Here are two flip- variations of a generator. They are gridfillers. The second one is shown below with an enlarged area.
interval length = VT~
fractal dimension = 2.0
Triangular grid
7 segments
segment values
1
1, 0, 1, 1
2
0,-1, 1, 1
3
1, 0, 1, 1
4
-1, 1, 1, 1
5
-1, 1, 1, 1
6
1, 0, 1, 1
7
1, 0, 1, 1
generator
level 2
level 3 (beveled corners)
interval length = V7~ fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1, 0,-1,-1
-1,-1,-1
0,-1,-1
1,-1,-1
1,-1,-1
0,-1,-1
0,-1,-1
generator
level 2
level 3 (beveled corners)
107
Here are two specimens based on a common generator shape.
interval length = V?~ fractal dimension = 2.0
Triangular grid
7 segments
segment values:
-1, 1,-1, 1
1, 0, 1,-1
1, 0,-1, 1
0,-1, 1,-1
1, 0, 1,-1
1, 0, 1,-1
-1, 1,-1, 1
V7J
generator
level 2
level 3 (rounded corners)
interval length = V7~ fractal dimension = 2.0
riangular grid
segments
;gment values:
-1, 1, 1, 1
1, 0, 1, 1
1, 0,-1,-1
-l -l -l
w
r
\
level 2
level 3 (rounded corners)
l! 0, 1, 1 )\
1, 0, 1, 1
-1, 1, 1, 1
\ 7
generator
108
Here is a highly craggy specimen. It is shown below in a 3-way pertiling.
interval length = V? -
fractal dimension = 2.0
Triangular grid
7 segments
segment values
1
-1. 1, 1,-1
2
-1, 1,-1, 1
3
1, o, 1,-1
4
1, 0,-1, 1
5
1, 0, 1,-1
6
1, O s -l s 1
7
0,-1, 1,-1
generator
level 2
level 4
109
This self-crossing curve is quite interesting. Below is a rotated rendering of teragon 4.
interval length = V?"
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1,-1,-1,-1
1, 0, 1, 1
0,-1, 1, 1
-1. 1, 1, 1
0, 1,-1,-1
1, 0, 1, 1
0, 1,-1,-1
generator
level 2
level 3 ( rounded corners)
holes
On the next page I show something about this curve that
I had not initially expected. This may not come as such a
surprise to you, after having seen several specimens.
When I first drew this curve, I noticed that the holes in
the shape corresponded to the nodes. Could it be that the
nodes could fit into the holes?
So I decided to try some pertiling: I made a copy
and rotated it by 120 degrees (knowing that this is a
triangle-grid specimen). And lo and behold, they fit
together like peas in a pod (or several peas in several
pods). Then I wondered if the remaining holes might be
filled by a third copy, rotated by -120 degrees. Imagine
how excited I was when the three of these specimens fit
together to form a Gosper Island! On the next page is a
picture of this three-way mating. That's quite an
intimate embrace!
110
Ill
Next we come to the 48 family. This family has some things in common with the V2 family: the generator lies on a 45
degree diagonal. Also, it can be seen as a superset of the V2 family (as well as the V4 square grid family). This is because the
values 2, 4, and 8 are powers-of-two numbers (2 1 = 2; 2 2 = 4; 2 3 = 8). We will see later that the VI 6 square grid family is a
superset of the V2, V4 square grid, and V8 families.
We've already seen one member of the V8 family: I showed it to you at the beginning of the book as an example of
how the turtle can use flippings to convert an otherwise self-crossing curve into a self-avoiding curve:
;elf-av
interval length = Vs~
fractal dimension = 2.0
Square grid
5 segments
segment values:
-1, 1,-1,
0, 1, 1,
1, 1, 1,
1, 0,-1,
1,-1, 1,
generator
level 2
level 5 (rounded corners)
When I showed this curve to you before, it was rotated 45 degrees. Here is it shown in its native familial orientation.
Notice that the generator has only 5 segments, and that three of those segments have a length of V2. These segments are
responsible for the three large lobes in the 2 nd teragon.
As a general rule, you can consider segments of length 42 to count as two (remember that we square the lengths
when calculating fractal dimension). So in this case, two one-length segments and three segments of V2 - when squared -
add up to 8: the family number.
112
The ^8 family is quite versatile. First let's look at some curves that fill a right triangle. Two of them are shown below. Like
the last curve I showed you, the generators for these curves each have 5 segments, three with a length of V2.
interval length = Vl~
fractal dimension = 2.0
Square grid
5 segments
segment values:
1
2
3
4
5
1, 1, 1,
1, 0, 1,
0,-1,-1,-
1, 1, 1,
-1. 1. 1.-
generator
level 2
level 4 (rounded corners)
interval length = VI - fractal dimension = 2.0
Square grid
5 segments
s<
1
2
4
5
;gment values
1. 1, 1, 1
1,-1,-1,-1
1, 1, 1, 1
-1, 0, l s -l
0, 1,-1, 1
generator
level 2
level 4 (rounded corners)
This last one is so interesting I decided to render it in color. It's shown on the next page.
113
ml
fw ,
r&cs^n
C£ BSSlSk
mz&ss^^
S3£0£^\
Here's another triangle-shaped specimen. This one has even fewer segments: 4! One of the segments is length V2 and the
last segment is length 2. Following the rule of squaring all lengths, as I said earlier, you can see how the sum is 8. Because
of the long segment length, the result has a great variety of lengths within - with a lot of self-similar patterning.
interval length = Vs~
fractal dimension = 2.0
Square grid
4 segments
segment values:
1: 1, 0, 1,-1
2: 0, 1,-1, 1
3: 1,-1,-1,-1
4: 0, 2,-1, 1
generator
level 2
level 6 (rounded corners)
114
Fm particularly fond of this one. So I made a color rendering of it, and rotated it 90 degrees. It is shown below.
interval length = Vs~
fractal dimension = 2.0
^uare grid
segments
;gment values:
1, 1, 1, 1
A
level 3 (rounded corners)
0, 1, 1,-1
-1, 0,-1, 1
1, 1, 1, 1
0,-1, 1,-1
1, 0,-1, 1
A
<* A
Z
z
\
"
k
genera
tor
level 2
115
Here are two more right triangles of the J8 family. These are a little less well-behaved, but interesting nonetheless.
interval length = Vs~
fractal dimension = 2.0
Square grid
6 segments
segment values:
1
2
3
4
5
6
1,-1,-1,-
1, 1, 1,
-1, 0,-1,
0, 1, 1,-
1, 0,-1,
0. 1. 1.-
generator
level 2
level 3 (rounded corners)
interval length = Vl~ fractal dimension =
= 2.0
Square grid
4 segments
segment values:
1: 0, 2,-1, 1
2: 1,-1,-1,-1
3: 0, 1,-1, 1
4: 1, 0, 1,-1
/1AK
level 4 (rounded corners)
>
\
^*
genera
tor
/ /<
level 2
116
This next specimen is a natural self-avoider. It is a relative of a V4 specimen we met earlier. On the next page I show five
more curves of this family.
interval length = VW
fractal dimension = 2.0
Square grid
5 segments
S\
;gment values:
-1, 1, 1, 1
1, 1, 1, 1
1,-1, 1, 1
1, 0,-1,-1
0, 1,-1,-1
/V1
) <
f
T? %
\
generator
level 2
level 4
117
interval length = Vs~
fractal dimension = 2.0
Square grid
5 segments
segment values:
1
2
3
4
5
1,-1, 1,
0, 1,-1,-
-1, 1, 1,
1, 0,-1,-
1. 1. 1.
generator
level 4 (rounded corners)
interval length = Vs~
fractal dimension = 2.0
Square grid
8 segments
segment values:
1
2
3
4:
5
6:
7:
8:
0, 1,-1,-
1, 0, 1,
0,-1,-1,-
1, 0, 1,
0,-1,-1,-
1, 0, 1,
0,-1,-1,-
1. 0. 1.
f I w d
w
generator
level 3 (rounded corners)
interval length = Vs~
fractal dimension = 2.0
Square grid
8 segments
segment values:
1
2
3
4
5
6
7
8
0, 1, 1,
0, 1,-1,-
-1, 0, 1,
0, 1, 1,
1, 0,-1,-
1, 0, 1,
0,-1,-1,-
1. 0.-1.-
f
1
f
generator
level 3
(rounded corners)
interval length = Vs~
fractal dimension = 2.0
Square grid
8 segments
segment values:
1, 0, 1
0, 1,-1
-1, 0, 1
0, 1,-1
1, 0, 1
0,-1,-1
1, 0, 1
0, 1,-1
-1 . W
generator
level 3 (rounded corners)
interval length
vr
fractal dimension = 2.0
Square grid
6 segments
segment values
1
-1, 1,-1,-1
2
-1, 1, 1, 1
3
1, 0,-1,-1
4
1, o s 1, 1
5
i, 0,-1,-1
6
1, 0, 1, 1
generator
level 2
level 5
118
That last curve fractalizes into a shape that
is similar to the "Twin Dragon": the result
of joining two HH Dragons. But notice
that it is not quite the same as the Twin
Dragon; it has pinched-off babies - which
each have their own pinched-off babies.
Twin Dragon
This next curve fractalizes into a pair of Twin-Dr agon-like curves. Because of the similarity to the shape as the Twin
Dragon, I call it the "Twin-Twin Dragon". Are the two twins holding hands? No; their babies are holding baby hands.
Twin -Twin Dragoi
interval length = Vl~ fractal dimension = 2.0
Square grid
6 segments
segment values:
0, 1
0, 1
1,-1
1,-1
0, 1
0. 1
1, 1
1, 1
1, 1
-1,-1
1, 1
-1,-1
generator
level 2
level 4 (rounded corners)
Twin-Twin Dragon
119
Speaking of dragons, the ^8 family produces more dragons that are related to the HH Dragon. Here's one:
interval length = VT" fractal dimension
Square grid
4 segments
segment values:
1: 0, 2, 1, 1
2: 1,-1, 1, 1
3: 1, 0, 1, 1 ,
N
level 4 (rounded corners)
W
r
Y/]<
generator
level 2
Let's see it rendered at a higher level, below. To the right is the HH Dragon.
120
Here's another specimen that is related to the HH Dragon:
I am impressed with how this curve is
so unpredictable and irregular in its
internal meandering, yet it is able to
avoid any self-crossings (it does self-
touch on vertices: those are separated
due to the rounded-corners scheme of
the drawing). Here is a rendering of two
copies of this curve (one flipped 180
degrees). They are combined to make
the shape of the twin dragon - which
closes the loop, enabling it to be filled
internally with color.
interval length = Vs~
fractal dimension = 2.0
^uare grid
segments
;gment values:
-1, 1, 1, 1
1, 0, 1, 1
0, 1,-1,-1
1,-1, 1, 1
1, 0, 1, 1
1-1-1
A ,
^ %
level 3 (rounded corners)
w
\
^
M
level 2
\
generator
3
121
Here's another specimen that resolves to the same shape as the HH Dragon. Since the generator has shorter segments in
the middle region, the mid-sections of its tergaons are rather knotted, and full of detail. This specimen's teragons are
precariously self-touching (even with rounded-corners). I have rendered it below, rotated 90 degrees.
interval length
= VT
fractal dimension = 2.0
Square grid
4 segments
segment values:
1: 1, 1,-1,-1
2: -1, 0,-1,-1
3: 0, 1, 1, 1
4: 2, 0, 1, 1
w
o
\
level 4 (rounded corners)
J
w
< 5\
/
generator
level 2
122
Another V8 Dragon is shown below. This one also resolves to the shape of the HH Dragon.
interval length = V! - fractal dimension = 2.0
Square grid
5 segments
segment values:
1: 0, 2, 1,
2: l s 0, 1,
3: 0,-1,-1,
4: 1, 0, 1,
5: 0, 1,-1,
generator
level 2
level 3 ( rounded corners )
Here it is fractalized at a higher level, splined, colorized, and slightly rotated... for your brain-filling pleasure.
123
Here is a self-avoiding dragon that I was excited to discover. It appears to be a relative of the Dragon of Eve. It's like
adding a smaller triangular bump onto the big triangular bump of the Dragon of Eve. It's like a curly Dragon of Eve!
Curled Dragon of Eve
interval length = Vl~
fractal dimension = 2.0
Square grid
5 segments
segment values:
1: -1, 1, 1, 1
2: 0, 1, 1, 1
3: 1,-1, 1, 1
4: 1, 0,-1,-1
5: 1, 1,-1,-1
generator
level 2
level 4 (rounded corners)
124
There is one last fractal I want to show in the ^8 family: I call it "Brainfiller". Below it is colored and rotated.
Brainfiller
interval length = VT" fractal dimension
^uare grid
segments
;gment values:
0, 1,-1, 1
1, 0, 1,-1
0,-1,-1, 1
1, 0, 1,-1
0, 2, 1,-1
k
level 2
> 9^%
level 4 (rounded corners)
>
**
k
genera
tor
r
125
The V9 square grid family has many interesting plane-filling curves. The square root of 9 is of course 3. And, being an
integer, my scheme places the interval length horizontal, stretching across three grid cells. We already encountered one
member of this family early on when I showed you the Koch curve: its friend, the Square Koch. Here is its diagram:
Square Kocl
interval length = V9~ fractal dimension = 1.4649736
Square grid
5 segments
segment values:
1, 0, 1,
0, 1, 1,
1, 0, 1,
0,-1, 1,
1, 0, 1,
yv
r ^
generator
_ra ETL
level 2
level 4
Now let's add a floor and a basement to this generator and see what happens. Lo and behold, we get one of the most
familiar - and oldest - plane-filling curves of all time: the "Original Peano Curve" (as Mandelbrot called it: Giuseppe
Peano explored many variations). Rounded corners help a lot when viewing this curve.
Original Peano Curve interval length = V9~ fractal dimension = 2.0
Square grid
9 segments
segment values:
w
1
1, U, 1
0, 1, 1
1, 0, 1
0,-1, 1
-1, 0, 1
0,-1, 1
1, 0, 1
0, 1, 1
1, 0, 1
4
' w
— O ?.0 ?.rfO J .*Oj .jO Q.-0 CVOO -O O jO„
1
^ 4
OiLOnLC/i ijji CC^CCj^LO^lC/^ CC/
genera
tor
le
ve
level 3 (rounded corners)
126
Here is a variation that fills the same area as the original Peano curve, but the shape it fills is a right triangle:
interval length = V9~ fractal dimension = 2.0
9
^uare grid
segments
;gment va
1, 0, 1
0, 1,-1
1, 0, 1
0, 1,-1
1, 0, 1
0,-1,-1
-1, 0, 1
0,-1,-1
1, 0, 1
lues:
A
w
doS^c£feSLr^ra
-1
f
~^\ ^^^sg^^g^y^Qw
m^ /\a^ /^cvp /:
-1
^
^] ^/^oS^CrcQ^S^^^^rc
4
r
J2 n^Q^S^^q^iS&p^S
Zl C^^S^ra^^&^^C^^^
^
leve
^&^Q^^^u%^&&^0^
genera
tor
level 3 (rounded corners)
And here is a familiar theme once again: a generator shape can be made to create either a right triangle or a dragon, by
way of alternate flippings. This variation is like a dragon (okay, maybe it's not like a dragon... let's just go with // jaggy ,/ ).
interval length = V9~ fractal dimension = 2.0
Square grid
9 segments
segment values:
1
2
3
4
5
6
7
8
9
1, 0,-1,-
0, 1, 1,
1, 0,-1,-
0, 1, 1,
1, 0,-1,-
0,-1, 1,
-1, 0,-1,-
0,-1, 1,
1. 0.-1.-
r
re
a
generator
level 2
level 3 (rounded corners)
127
Where there be dragons... there be castles. The V9 Castle below is filled with holes... holes of all sizes. It is a holey castle.
No surprise: its fractal dimension is only -1.77.
Holey Castle
interval length = V9~ fractal dimension = 1.7712437
Square grid
7 segments
segment values:
1
2
3
4
5
6
7
0, 1,-1,-
1, 0, 1,
0,-1,-1,-
1, 0, 1,
0, 1, 1,-
1, 0,-1,
0.-1.-1.-
4 K 4
f ^
5
ETL_m
generator
level 2
level 4
The Holey Castle is related to a large class of fractals that are riddled with holes, such as the Sierpinski Triangle and the
Sierpinski Carpet (and their 3D counterparts: the Tetrix and the Menger Sponge):
128
Remember the variation of Cesaro's Sweep I showed you from the V4 family? It has a double-sided vertical needle. Well, I
wondered if there might be something similar in the V9 square grid family . . .and I came up with the generator below.
Like Cesaro's Sweep, this curve is everywhere edge-self-touching except for the bottom edge. But unlike Cesaro's Sweep,
it has a wonderful fractal boundary. Its 4 th teragon is shown below at right. Rounded corners help only slightly to reveal
the curve's trajectory.
interval length = V9~~
fractal dimension = 2.0
Square grid
9 segments
segment values:
1: 1, 0, l s
0, 1,
0, 1,
0,-1, 1,
0,-1,
1, S
7: 0, 1,
8: 0,-1,
9: 1, 0,
4
f
4
generator
Below is an intriguing fractal curve of dimension -1.77.
interval length = V9~ fractal dimension = 1.7712437
Square grid
6 segments
segment values:
1
2
3
4
5
6
1, 0,-1,
0, 1, 1,
1, 0,-1,
-1,-1,-1,-
1, 0,-1,
1. 0.-1.
t
z
generator
k
ji.
z fi /z_Loz_
level 2
level 3 (rounded corners)
129
Here are two gridfillers based on a common generator:
interval length = V9~
fractal dimension = 2.0
Square grid
9 segments
segment values:
1
2
3
4
5
6
7
8
9
-1, 0, 1,
0, 1,-1,-
1, 0, 1,
0, 1,-1,-
1, 0, 1,
0,-1,-1,-
1, o, 1,
0,-1,-1,-
1. 0. 1.
generator
level 3 (rounded corners)
interval length = V9~
fractal dimension = 2.0
Square grid
9 segments
segment values:
-1,
0,
1,
0,
1,
0,
1,
0,
1,
0,-1,
1, 1,
0,-1,
1, 1,
0,-1,
■1, 1,
0,-1,
■1, 1,
0,-1,
level 3 (rounded corners)
generator
The sepcimen below has a generator with a 2-length segment corresponding to a 2x2 square (shown in
purple at right). It has a lot of self-touching edges, and so I used the low-pass smoothing filter to
render level 5 with filled-in areas to show the interesting self-similarity.
r
i
interval length = V9~ fractal dimension = 2.0
Square grid
6 segments
segment values:
0, 2,-1
1, 0, 1
1, 0, 1
1, 0, 1
0,-1,-1
0,-1,-1
generator
We are about to explore one of the most versatile, fertile, and abundant families of plane-filling fractal curves: the V9
triangle grid family. The first specimen to mention is none other than... the Koch Curve! Yes, our old friend Koch lives in a
triangular grid, and its interval length is 3 units long. The Koch curve has many cousins, and youTl see some similarities.
Koch Curve
interval length = V9~
fractal dimension =
1.2618595
Triangular grid
4 segments
;gment values:
1, 0, 1, 1
0, 1, 1, 1
1,-1, 1, 1
1, 0, 1, 1
jaAa? W^jl
. .A
^
^w Ia
_ ^j\a? \aJ\a
F \yj
<La^
generator
level 2
level 4
What happens if you draw the first three segments of the Koch Curve and then
instead of heading straight to the end, you flip back and draw the remainder as
a reflected Koch? Well, here's what you get.
.^2
&
Reflected Koch
interval length = V9~
fractal dimension = 1.7712437
Triangular grid
7 segments
segment values:
1, 0, 1,-1
0, 1,-1, 1
1,-1,-1, 1
-1, 0,-1,-1
1,-1, 1, 1
0, 1, 1,-1
1, 0, 1,-1
generator
level 2
level 3 (rounded corners)
131
With this curve, which I call "Reflected Koch", the fractal dimension goes
up to -1.77, since it has 7 segments instead of 4. Below is a table showing
these two curves, and one other member of the V9 triangle grid family. You
can see that the reflected Koch has obvious similarities to the Koch Curve,
having the same profile reflected on top and on the bottom. The curve
shown at the bottom does not have the same profile: its generator has a
triangle balanced upside-down on top of the Koch bump: it fractalizes
upward to make a triangle-shaped conifer tree with a lovely Koch
Snowflake inside (shown at right). I call it "Koch Holiday Tree".
generator
level 2
level 3
(rounded corners)
interval length = 3
num segments = 4
dimension =
1,2618595
_A
interval length = 3
num segments = 7
dimension =
17712437
interval length = 3
num segments = 7
dimension =
1.7712437
132
Now, taking the Koch Holiday Tree generator, let's add a triangular bump at the left, and try a few variations in flippings.
Here are two results:
interval length = V9~
fractal dimension = 1.8927892
Triangular grid
8 segments
level 3 (rounded corners)
interval length = V9~
fractal dimension = 1.8927892
Triangular grid
8 segments
segment values
1
2
3
4:
5
6:
7:
8:
0, 1,-1,-1
1,-1, 1, 1
0, 1,-1,-1
-1, 1, 1, 1
1, 0,-1,-1
0,-1, 1, 1
1,-1, 1, 1
1, 0, 1, 1
generator
level 3 (rounded corners)
Notice that the fractal dimension has gone up to -1.89. It seems we are getting close to filling a triangle, but there are still
holes. One more variation, with some clever flippings brings the total number of segments to 9. Tada - we have a plane-
filling curve!
interval length = V9~
fractal dimension = 2.0
Triangular grid
9 segments
segment values:
1, 0, 1, 1
-1, 1,-1,-1
1, 0, 1, 1
-1, 1,-1,-1
1, 0, 1, 1
0,-1, 1, 1
1,-1,-1,-1
0, 1, 1, 1
1,-1,-1,-1
A
generator
level 2
level 3 (rounded corners)
This is shown in higher resolution with rounded corners and filled-in, on the next page.
133
X
x
3&
Jl?l
viSobb
Si
J O o ^b O VJ ^C •
;< WXX
3^j Xo-bb cxbX cx_n oJl csSCq~~S( csSl
3 XX 13 33. 3 3, 3D 3 3, 3 L, 3 3, 3
r 3d 33d bbo 33d Ct3d 33d 33d d\3d3^
SUd<
c-
OQ^(
' ' L C 3 C L L U C C .
, ^w, _, o^Xr^ ir^ X"bXX^ >r-
^IcXXb XXX^q^XviXS "
X^5}^
3 ; j s^o Jr'o" Jr'S Vn" J e'er i c^^S^oOo r>X cS
X XXXxXX 33 3313 S) 33 XXXX CX> 0^
nX XSO Xbb" 1 S X~^ XX 3 XI c n? XX 3 SO r n r XX XI c S
bbb>bXXXXXXXXXX~ -■ - - ■"■'"
b
rX
^Wl
-
QoX CsJ
, CO L CO C 0^ b O-bl, CsX
r xX Xi xxv^r
q^pq^pq^vp
xs xs x>
)3 ^ o XX
OcO-bc-
r<~>^n
^bbcb^bbOVlbXr
^3D^
%XbBb^bffib
-^ X XnX Xi X, oX-rb^ X-XO^^X^XX^Xi XXb 5 <-
XXb XXbbbbb X ^ ^ XXXr
" r bX^bJX^
U i
vP-^) r ro 0-m 33^o c cssJo-n J-Pvd <L G
' ' " X_b c
X
ebb
)L 0^Mb^i^b5i^
,-bXc
<x Xx^^^x (
XXbXb X XXXXX : - -"- " : - -■"'-" : - -■
xx?x?xx?x?xx?x?x^
DD^rD Dr^jDj Dr^_rD C-v_^C) f
3 Dr^_rD Dn^rD
d33d<
iDJii
^VP !
DD^D) Dn-^DD D~^_rD D\_rD DD^DD
134
Can a generator with fewer than 9-segment be used to fill a triangle? Sure thing. But at least one segment has to be longer
than 1. This next specimen has a generator with 6 segments, and one of those segments has a length of V3. I call it
"Sawtooth". As you would expect, the process by which the triangle gets filled is less regular than with the last specimen.
Sawtooth
interval length = V9~
fractal dimension
Triangular grid
6 segments
segment values:
0, 1, 1
1,-1,-1
0, 1, 1
1,-1,-1
0, 1, 1
-2, 1,-1
f
generator
level 2
level 3 (rounded corners)
135
This specimen cannot plane-fill the triangle: its dimension is only ~1.77
interval length = V9~
fractal dimension = 1.7712437
Triangular grid
4 segments
segment values:
generator
This specimen is a plane-filler. It is a relative of the Koch Holiday Tree I showed you earlier. I call it "Plane-filler Holiday
Tree". Strangely enough, this one fills the triangle but it also dips down into the soil - perhaps to nourish its leaves.
Plane-filler Holiday Tree
interval length = V9~
fractal dimension = 2.0
Triangular grid
5 segments
segment values:
1, 1,-1,-1
-1, 1, 1, 1
1, 0,-1, 1
0,-1,-1, 1
2,-1, 1,-1
generator
level 2
level 4 (rounded corners)
136
137
This one is related to the plane-filler Holiday tree. It has a stylish asymmetric flair.
interval length = VW fractal dimension = 1.8927892
Triangular grid
6 segments
segment values:
1, 0,-1,
0, 1,-1,
-1, 1, 1,
1, 0, 1,
0,-1, 1,
2,-1, 1,-1
generator
level 3 (rounded corners)
Now let's come back to the Koch Curve and
explore a variation of the generator in which the
triangular bump is turned unto a full triangle,
and tilted up on its vertex, to make the following
generator:
138
interval length = V§~ fractal dimension
ri angular grid
segments
;gment values:
1, 0, 1, 1
-1, 1, 1, 1
1, 0, 1, 1
1 -1 ! l s 1
1, o s 1, 1
1, 0, 1, 1
w
w
WW
level 2
♦su.
level 3 (beveled corners)
g
V.
enerator
Here's what happens if we use the same generator shape and fiddle with the flippings:
interval length = V9~ fractal dimension = 1.6309297
Triangular grid
6 segments
segment values:
1, 0, 1, 1
-1, 1, 1, 1
1, 0,-1, 1
0,-1, 1,-1
1, 0,-1, 1
1, 0, 1, 1
_SZ
generator
WvTv V
level 2
level 3 (rounded corners)
Now, if we make a reflection of this triangle underneath the horizontal line, and use no flippings, we have a gridfiller!
interval length = V9~ fractal dimension = 2.0
Triangular grid
9 segments
segment values:
1
2
3
4
5
6
7
S
9
1, 0, 1
-1, 1, 1
1, 0, 1
0,-1, 1
0,-1, 1
1, 0, 1
-1, 1, 1
1, 0, 1
1. 0. 1
generator
level 2
level 3 (rounded corners)
139
And, what if we shift that lower triangle to the right? Here's what we get:
interval length = V9~
fractal dimension = 2.0
Triangular grid
9 segments
segment values:
1, 0, 1, 1
-1, 1, 1, 1
1, 0, 1, 1
0,-1, 1, 1
1, 0, 1, 1
0,-1, 1, 1
1, 0, 1, 1
-1, 1, 1, 1
1, 0, 1, 1
52
X
generator
level 2
level 3 (rounded corners)
Did you notice something? This has the same shape as the pinched Ter-Dragon of the V3 family we met earlier. You can
see that this generator is made up of three copies of the Ter-Dragon, but they are not arranged in the usual Ter-Dragon
way.
Now check out this variation of the specimen, shown below. It is rendered with splines on the next page.
interval length
= V9"
fractal dimension =
Triangular grid
5 segments
segment values:
1; 2.-1.-1. 1
generator
^
S*
level 4
(rounded corners)
-1, 2, 1,-1
1, 0,-1,-1
0,-1,-1,-1
1, 0, 1, 1
c
1
^\
level 2
140
141
The V9 triangle grid family includes one of the finest specimens of all: the Snowflake Sweep, featured in Mandelbrot's book:
Snowflake Sweep
interval length = V§~
fractal dimension = 2.0
riangular grid
segments
;gment values:
0, 1, 1,-1
0, 1,-1, 1
1, 0,-1, 1
1,-1,-1, 1
-1,-1,-1,-1
1, 0, 1,-1
1, 0,-1, 1
^
c\
A>.
f
$
generator
level 2
v>
level 3
Notice how it fills the Koch snowflake.
Earlier I pointed out that Mandelbrot had said
he // designed ,/ a self-avoiding curve; I suggested that
the curve could just as easily have been "discovered".
Well, Mandelbrot's Snowflake Sweep is so amazing
and beautiful that I can hardly blame him for claiming
to be its designer.
By the way, this curve is very flexible. Any
segment in the generator can have an arbitrary
flipping in its x value, and the teragons will still be
self-avoiding. On the next page is a variation in x-
flippings.
142
interval length = V9~ fractal dimension = 2.0
Triangular grid
7 segments
segment values:
0,
0,
1,
1,
-1,
1,
1,
1,-1,-1
1, 1, 1
0,-1, 1
■1,-1, 1
■1, 1,-1
0, 1,-1
0, 1, 1
generator
level 2
level 3
V9 Carpets
Now I want to show you a series of V9 triangle grid family curves that incorporate segments of length V3, and fractalize to
fill a tilted rectangle. I call them "V9 Carpets' 7 . 1 have uncovered several of them. Here is a small selection, for your brain-
filling pleasure. In all cases, the 4 th or 5 th teragons are shown with rounded corners.
143
1, 0, 1,
-1, 1, 1,-
1, 0, 1,
1,-2,-1,-
1. 1. L-
2,-1,-1
0, 1, 1
-1, 0,-1
0, 1, 1
1, 0, 1
0,-1, 1
1, 0,-1
2,-1, 1,"
0, 1,-1,
-1, 0,-1,-
0, 1, 1,-
1, 0,-1,-
0,-1,-1,
1. 0. 1.
144
-1,"
0,
2,
0,-
-1,
0,
145
Unraveled Carpets
I showed you the following curve early on in the book. This curve seems to be related to the carpets series, except that the
weaving has come undone. I call it "Unraveled Carpet".
Unraveled Carpe
interval length = V9~ fractal dimension = 2.0
Triangular grid
7 segments
segment values:
-1, 2,-1, 1
1, 0,-1,-1
1, 0, 1, 1
0,-1, 1, 1
0,-1,-1,-1
1, 0,-1,-1
1, 0, 1, 1
generator
level 2
level 4
Here's a variation on the same generator that makes another unraveled carpet. This one seems a bit more orderly in its
unraveling.
interval length =
w
fractal dimension = 2.0
riangular grid
segments
;gment values:
-l s 2, 1, 1
1, 0,-1,-1
1, 0, 1, 1
0,-1,-1, 1
0,-1, 1,-1
1, 0,-1,-1
1, 0, 1, 1
w
^
f 7 1
level 4 (rounded corners)
i
*
/
w
h
generator
level 2
/
The specimen on the next page has unraveled itself in a strange way - and it is also a self-crosser.
146
interval length = V§~ fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1
2
4
5
6
7
-1, 2 S 1, 1
1, 0,-1,-1
0,-1, 1,-1
1, 0,-1,-1
1, 0, 1, 1
0,-1,-1, 1
1, 0, 1, 1
V
2,
^
"tra
&
generator
level 2
level 4 (rounded corners)
147
Where Be Dragons?
Are there any dragons in this family? In fact there is a whole clan of them. This clan of dragons consist of complexified 3x-
scaled variations of a V3 specimen we met early on in the book - shown at left. I found three, but I have a suspicion that
there are many more hiding in the deep V9 sea.
root 3
f*
root 9 variations, rotated
Each generator in this clan of dragons has five segments. Two of those segments have a length of V3, and the remaining
three segments are of length 1. As I showed you earlier, squaring each of these lengths and then adding them results in a
number that determines the fractal dimension. In this case, we get 9. On the next page is a color rendering of the self-
avoiding curve below. And then I'll show you two others in the clan.
interval length = V9~
fractal dimension = 2.0
Triangular grid
5 segments
segment values:
1,-2, 1, 1
1, 1, 1, 1
0, 1, 1, 1
0, 1,-1,-1
1,-1,-1,-1
£>
generator
level 2
level 5
148
149
interval length = V9~
fractal dimension = 2.0
Triangular grid
5 segments
segment values:
1: 2,-1,-1,-1
2: 2,-1, 1, 1
3: 0, 1,-1,-1
4: 0, 1, 1, 1
5: -1, 0, 1, 1
generator
level 2
level 6 (rounded corners)
interval length = V9~ fractal dimension = 2.0
Triangular grid
5 segments
t ^^r^ /vrfcw
&&£
)&
m
"N V
$%?
WtlS
150
This specimen resolves to the same shape as the orderly unraveled carpet I just showed you.
interval length = V9~
fractal dimension = 2.0
Triangular grid
5 segments
segment values:
-1, 2, 1, 1
2,-1,-1, 1
0,-1, 1,-1
1, 0,-1,-1
1, 0, 1, 1
*f-
generator
level 2
level 4 (rounded corners)
This next specimen is a self-avoider. On the next page I show it in color with rounded corners, on a triangle initiator.
interval length = V9~
fractal dimension = 2.0
Triangular grid
5 segments
\v-
S"\ s\ Vs
;gment values:
1, 0, 1, 1
1, 0,-1,-1
1,-2,-1, i r^
k
$$
'&£
V
r 7 <^
<C IT
$Mi"
. ^ \ ,
_r
>
generator
level 2
level 4
151
152
These two self-avoiders, based on the same generator, are quite similar, but look closely: you can see subtle differences.
interval length = V9~
fractal dimension = 2.0
Triangular grid
9 segments
segment values
1
-1. 1, 1,-1
2
-1, 1, 1, 1
3
1, 0, 1, 1
4
1, 0, 1,-1
5
1, 0, 1, 1
6
0,-1, 1, 1
7
0,-1, 1,-1
8
1, 0, 1,-1
9
1, 0, 1, 1
level 3
generator
interval length = V9~
fractal dimension = 2.0
Triangular grid
9 segments
segment values:
-1, 1, 1,-1
-1, 1,-1, 1
1, 0,-1, 1
1, 0, 1,-1
1, 0,-1, 1
0,-1,-1, 1
0,-1, 1,-1
1, 0, 1,-1
1, 0,-1, 1
generator
Here's another self-avoider. I call it "Brainfolds". (It was drawn by the turtle early on in the book).
Brainfolds
interval length = V9~
fractal dimension = 2.0
Triangular grid
5 segments
seament values:
w
level 4 (rounded corners)
1
-1, 2,-1, 1
1, 0,-1,-1
1, 0, 1, 1
0,-1, 1, 1
2,-1, 1,-1
£*
1 <s.
generator
">
level 2
^^
I had assumed that Brainfolds would fractalize to the
same shape as the specimen at the upper-left of this
page. My estimation was not quite right: there
seems to be at least one small difference, shown at
right: The pink region is a mirror image of the green
region indicated by the arrow.
This next curve resolves to a 3x-size Ter-Dragon. Notice that the first segment in the generator has a length of V3, and that
the rest of the generator consists of two Ter-Dragon generator-like shapes.
interval length = V9~
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
1, 1, 1, 1
1,-1, 1, 1
-1, 0,-1,-1
1,-1,-1,-1
0, 1, 1, 1
1,-1, 1, 1
0, 1,-1,-1
j
generator
level 2
level 3 (rounded corners)
lJ h&¥
^
#fe
>^pc
£>
154
Here is a curve whose horizontal segments have length 1 and whose vertical segments have length V3. Even though it
lives in the triangular grid, it has 90-degree angles. But that doesn't qualify it as a member of the square grid family! And
check it out - this is a natural self-avoider.
interval length = V9~
fractal dimension = 2.0
Triangular grid
5 segments
segment values:
-1, 2,-1, 1
0, 1,-1
0, 1, 1
0,-1,-1
■2,-1, 1
generator
level 2
level 4 (rounded corners)
155
Here are a few rather zig-zaggy specimens: one is a busy dragon-like gridfiller and the other has a dimension of -1.77.
interval length = V9~
fractal dimension = 2.0
Triangular grid
9 segments
segment values:
-1, 1, 1, 1
1, 0, 1, 1
1, 0, 1, 1
0,-1, 1, 1
1, 0, 1, 1
0,-1, 1, 1 i
1, 0, 1, 1 \
level 4
generator
interval length = V9~
fractal dimension = 1.7712437
Triangular grid
7 segments
segment values:
level 3 (rounded corners)
generator
The remaining specimens of this family that I will show you have dimension -1.89.
interval length = V9~
fractal dimension = 1.8927892
Triangular grid
5 segments
segment values:
generator
level 4 (rounded corners)
interval length = V9~
fractal dimension = 1.8927892
Triangular grid
5 segments
segment values:
1, 0, 1, 1
-1, 1,-1,-1
2, 0, 1, 1
0,-1,-1,-1
1, 0, 1, 1
S~L
generator
level 4 (rounded corners)
156
I call this one "Dolphins"
Dolphir
interval length = V9~
fractal dimension = 1.8927892
Triangular grid
6 segments
segment values:
1, 0, 1, 1
0, 1,-1,-1
1, 1,-1, 1
0,-1, 1, 1
0,-1,-1,-1
1, 0, 1, 1
generator
level 2
level 3 (rounded corners)
157
These last two curves are true gems. They are both based on the same generator shape. This first curve is shown at the
very beginning of the book, and the second one is shown below.
interval length = V9~
fractal dimension = 1.8927892
Triangular grid
6 segments
interval length = V9~
fractal dimension = 1.8927892
158
After coming down from seeing the amazing variety of the V9 triangle grid family, anything would seem anti-climactic.
And indeed, I must report to you that the /10 family has very little to offer the eye and brain. Take a look and see for
yourself. Why is this? I cannot say for sure, but I believe there must be some mathematically-relevant explanation.
I'll start with a rather non-descript specimen. It has a generator that looks like the classic Peano generator, but
with a raised forearm on the right side. The distance from the origin to the elbow of the arm is V9, and the distance to the
tip of the hand is /10. By taking the Peano generator and adding the waving arm, and some alternate flippings, we get the
following shape:
interval length = VTo
fractal dimension = 2.0
Square grid
10 segments
segment values:
1, 0, 1,
0,
1,
0,
-1,
0,
1,
0,
1,
10: 0,
1,-1,
0, 1,
1,-1,
0, 1,
1,-1,
0, 1,
1,-1,
0, 1,
1,-1,
generator
level 2
level 3 (rounded corners)
In an attempt to add some excitement, I will pertile
this specimen four times. Here it is shown at right.
Notice the alternating pattern in the
flippings of the genetic code. I found that alternating
the flippings helped me to locate several gridfillers
of this family. The next four specimens use this
alternating trick. On the following page are three
specimens. They are all gridfillers; two of them are
based on a common generator shape.
159
interval length = VTo fractal dimension = 2.0
Square grid
10 segments
segment values:
1
1, 1
2
1
0,-1
-1
3
1, 1
4
1
0,-1
-1
5
1, 1
6
1
0,-1
-1
7
-1, 1
3
-1
0,-1
-1
9
-1, 1
1
0: 1
0,-1
-1
JT J
r
JT — ^ —
generator
level 2
level 3 (rounded corners)
interval length = VTo fractal dimension = 2.0
Square grid
10 segments
segment values:
1
1,-1
-1
2
1
0, 1
3
1,-1
-1
4
1
0, 1
5
1,-1
-1
6
1
0, 1
7
-1,-1
-1
3
-1
0, 1
9
-1,-1
-1
1
0: 1
0, 1
generator
level 2
level 3 (rounded corners)
interval length = VTo fractal dimension = 2.0
Square grid
10 segments
segment values:
1
1
1
2
1
-1
-1
3
-1
1
4
1
1
-1
1
-1
w
w
5
4
4
6
-1
-1
-1
7
1
1
1
-1
1
f
*
f
3
^
9
1
1
1
0:
-1
-1
, ^
r
generator
level 2
level 3 (rounded corners)
160
The last two curves I will show of the /10 family is a dragon and a palindrome with dimension -1.806.
interval length = VTo
fractal dimension = 2.0
Square grid
10 segments
segment values:
10:
generator
level 2
level 4
interval length = VTo
fractal dimension = 1.80618
Square grid
7 segments
segment values:
1
2
3
4
5
6
7
1, 0, 1,
1, 0,-1,-
0, 1,-1,-
-1,-1,-1,-
0, 1,-1,-
1, 0,-1,-
1. 0.-1.-
generator
level 2
level 3 (rounded corners)
161
It is time to show you another overweight palindrome dragon. Like many of the others we've seen, this member of the
/12 family has a typical yam-like shape: fat and lumpy in the middle; tapered at the ends.
interval length = VT1
fractal dimension = 2.0
Triangular grid
12 segments
segment values:
1,
-1,
1,
0,
1,
-1,
-1,
1,
0,
: 1,
:-l,
: 1,
generator
level 2
level 3 (rounded corners)
Given the many ways you can traverse a triangular grid in the interval of /12, we should expect many more palindrome
dragons. I'll show you four more. These are not at all yam-like. In fact, their boundaries are quite craggy.
interval length = V~f2
fractal dimension = 2.0
Triangular grid
12 segments
segment values:
-1, 1,
1, 0,
1, 0,
-1, 1,
1, 0,
0,-1,
0,-1,
1, 0,
-1, 1,
10: 1, 0,
11: 1, 0,
122-1, 1,
V
generator
level 2
level 3
162
interval length = VT1 fractal dimension = 2.0
Triangular grid
12 segments
segment values:
generator
level 2
level 4 (rounded corners)
interval length = V~f2 fractal dimension = 2.0
Triangular grid
12 segments
segment values:
\ A
generator
level 2
level 3 (rounded corners)
interval length = V~f2 fractal dimension = 2.0
Triangular grid
12 segments
segment values:
1
2
3
4
5
6
7
3
9
-1
1
1
1
1
10:
11:- 1
12:
generator
level 2
level 3
163
Here is a /12 specimen that includes an abnormally long segment - extending the length of V7, followed by three
segments of length 1. Who would have ever expected that its 5 th teragon would resemble a bat's cave?
Bat Cave
interval length
= V~f2 fractal dimension = 1.8532568
Triangular grid
4 segments
J^Vl
segment values:
1: -1, 3, 1,-1
2: 1, 0,-1,-1
3: 1,-1, 1,-1
4: 1, 0,-1,-1
XJ
*5^v
F \
<
y
y
jy\y
"^
1
generator
level 2
level 4 (rounded corners)
164
Here are two interesting specimens. The first one is based on a tiling of 12 triangles - illustrated at bottom-left. The second
one is shown with two kinds of 3-way pertilings - shown at bottom-right.
interval length = VT1 fractal dimension = 2.0
Triangular grid
12 segments
segment values:
1, 0, 1
-1, 1,-1
1, 0, 1
-1, 1,-1
-1, 0, 1
-1, 1,-1
1, 0, 1
1,-1,-1
0, 1, 1
10: 1,-1,-1
11: 0, 1, 1
12: 1,-1,-1
generator
level 3
interval length = V~f2
fractal dimension = 2.0
Triangular grid
12 segments
segment values:
1, :
-1, 1
-1, 1
1,
0,-1
1,
0,-1
1, o ;
-1, 1
10: 1,
113-1, 1
12: 1,
generator
level 2
level 3 (rounded corners)
165
Here are a couple of curves based on a common generator - it includes two segments of length V3:
interval length = Vl2
fractal dimension = 1.7684565
Triangular grid
5 segments
segment values:
1: l s 1, 1, 1
2: -1, 0, 1,-1
3: 0, 1, 1,-1
4: 1,-1, 1,-1
5: 1, 1,-1,-1
generator
level 2
level 3 (rounded corners)
interval length = VT1 fractal dimension = 1.7684565
Triangular grid
5 segments
segment values:
1: 1, 1, 1, 1
2: -1, 0,-1,-1
3: 0, 1,-1,-1
4: 1,-1,-1, 1
5: 1, 1, 1, 1
generator
level 2
level 4 (rounded corners)
166
Ancestry
We have met several families of fractal curves, and we have seen a number of ways in which they relate to each other. In
the graph below, I show examples from all families up to V12. The prime-numbered families are placed along the top.
The powers-of-two families (2, 4, 8) are shown at left. Notice that variations of the HH Dragon can be generated within
each of the power-of-two families. Similarly, any V3 curve can be generated within in the V9 family, since 9 is a multiple of
3. The V10 family can generate variations of both the >/2 and V5 family curves. And finally, the VI 2 family can generate
variations of V3 and V4 (triangle grid) curves.
167
Now it is time to look at the VI 3 square grid family. I will start
with a curve I discovered that is a self-avoider analogous to the
Gosper curve: it requires two kinds of flippings (normal and
double-flipped), and it roughly corresponds to a regular
polygonal tiling - in this case, the square. Take a square of 9
squares, and attach one square on each edge. That is the tiling
for this fractal curve. Since Mandelbrot referred to space-filling
curves as "Peano Curves", and also referred to the Gosper
Curve as "Peano-Gosper", I call this one the "13-Peano-
Gosper".
13-Peano-Gosper
interval length = V~f3
fractal dimension = 2.0
Square grid
13 segments
segment values:
0,
1,
0,
-1,
-1,
0,
1,
0,
1,
: 0,
: 1,
: 0,
: 1,
1,-1,
0, 1,
1,-1,
0,-1,
0, 1,
1, 1,
0,-1,
1, 1,
0, 1,
1,-1,
0, 1,
1,-1,
0, 1,
4 4
^ *1
r
generator
level 2
level 3
There are several variations of this curve with dimension less than 2. I'll show you two on the next page, followed by a
filled-in version of the second one.
168
interval length = V~13
fractal dimension = 1.8697408
0, 1,-1,
Square grid
10 segments
segment values:
1
2
3
4
5
6
7
8
0, I
-1, 0,
0, 1
1, 1
1, 0,
0,-l ;
0,-1
1, 0,
10: 1, 0,
generator
level 3
interval length = V~13
fractal dimension = 1.8697408
Square grid
10 segments
segment values:
1,-1,
1, 1,
0,-1,
1, 1,
0, 1,
1,-1,
0, 1,
1, 1,
1,-1,
0, 1,
generator
level 3 (rounded corners)
169
I would like to nominate this as the token Palindrome Dragon of the /13 square grid family:
interval length = V~f3 fractal dimension = 2.0
Square grid
13 segments
segment values:
-1,
0,
1,
0,
1,
0,
1,
0,
1,
: 0,
: 1,
: 0,
:-l,
4 ^1
generator
level 2
level 3
170
There is a Triangular Grid VI 3 Family as well as a Square Grid one. Let's check out a few specimens. Here is a curve I
discovered which is a partial gridfiller. I'll show it with an expanded version of the diagram scheme:
interval length = VT3
fractal dimension = 2.0
Triangular grid
13 segments
segment values:
1
2
3
4
5
6
7
8
9:
10:
11
12
13
1,
0, 1
■1,
0, 1
■1, 1
1,
1,-1
■1,
1,-1
1,
■1, 1
1,
1,-1
171
There are a few curious-looking palindrome dragons in this family:
interval length = V~f3
fractal dimension = 2.0
Triangul
ar
grid
13 segments
segment values:
1
0, 1, 1, 1
2
1,-1
3
0, 1
y\
4
-1,
7\
5
0, 1
/_ i
v^ vv. w
6
1,-1
7\a 7 \i / \i
7
1,-1
1,-1
/ V y X
8
V 7
9
0, 1
V
103-1,
V
11: 0, 1
12: 1,-1
1
3: 0, 1
generator
level 2
level 3
interval length = V~f3
fractal dimension = 2.0
Triangular grid
13 segments
segment values:
1
0, 1
2
-i, o
3
0, 1
4
1,-1
5
0, 1
6
1,-1
7
1,-1
8
1,-1
9
0, 1
10: 1,-1
11: 0, 1
122-1,
1
3: 0, 1
generator
level 2
level 3
172
Generalized Gosper Curves Discovered by Fukuda, Shimizu, and Nakamura
Fractal explorers in Japan devised a search algorithm that finds what they call "generalized
Gosper curves" (Fukuda, et al [4]). These are plane-filling curves that use the scheme I described
on page 97. Basically, the Gosper Curve is drawn over a grid of seven triangles arranged in a
checkerboard fashion. The picture at right shows how the interval length stretches from A to B.
Each of the seven triangles maps to the larger triangle outlined with dotted lines.
This ingenious scheme permits the
search algorithm to find an infinite series of
generalized Gosper Curves. The diagram at
right shows how a similar assembly of triangles
can be used to identify a generalized Gosper
curve that is a member of the VI 3 triangle grid
family. Below I show how this curve fits within
my scheme. Later on I'll show you another one
of the many curves that these explorers have
uncovered.
Fukuda Gosper 13
interval length = Vl3 fractal dimension = 2.0
Triangular grid
13 segments
segment values:
-1, 1,-1,-
0, 1, 1
1,-1, 1
1, 0,-1
-1, 1,-1
0, 1, 1
0, 1, 1
1,-1, 1
0,-1,-1
10: 1,-1, 1
11: 0,-1,-1
12: 1, 0,-1
13: 0, 1, 1
generator
level 2
level 3
173
One way to express a square number S is to draw a square made up of S smaller squares. Fve shown you fractal curves of
the V4 and V9 families where square regions are filled. Now we come to the next square number: 16. Below is a curve of
dimension 2 that is a partial gridfiller, and it is also partially edge self-touching. On the next page are two specimens with
dimension < 2 that are "trying" to fill a square, and a 2D specimen with 4-fold symmetry.
interval length = VTB fractal dimension = 2.0
Square grid
16 segments
segment values:
o.-i
1, 0,
i; 0,-1.
: 0,-1.
: 1, 0,
:0, 1
: 1, 0,
:0,-l
: 0,-1
— w*
fit
generator
level 2
level 3
174
interval length = VTB fractal dimension = 1.9036775
Square grid
13 segments
segment values:
1, 0, 1
1, 0, 1
0, 1,-1
0, 1, 1
-1, 0,-1
-1, 0, 1
0, 1,-1
1, 0, 1
1, 0, 1
10: 1,-1, 1
11: 0,-1,-1
12: 1, 0, 1
13: 0,-1,-1
generator
level 2
level 3 (rounded corners)
interval length = VTB fractal dimension = 1.7924813
Square grid
10 segments
segment values:
0, 1,-1
1, 0, 1
1, 0,-1
-1, 1,-1
0, 1, 1
1, 0, 1
1,-1, 1
0,-1, 1
0,-1,-1
10: 1, 0, 1
generator
level 2
level 3 (rounded corners)
interval length = VTB fractal dimension = 2.0
Square grid
16 segments
segment values:
0, 1,
0,-1,'
1, 1,
1,-1
0, 1
-1, o,-i
0, 1, 1
1, 0, 1
1, 0,-1
10: 0, 1,-1
11: l t 0, 1
12: 0,-1, 1
13: 0,-1,-1
14: 1, 0,-1
15:0,-1, 1
16: 0,-1,-1
A ^ 4
r r
generator
level 3
175
The following two generators of the /16 square grid family have only three segments. They do not correspond to
hexagonal or triangular grid lines, even though they may appear to upon first glance - they are indeed inhabitants of the
square grid. In both curves, the upward-sloping segments traverse across the diagonal of two squares, thus having
lengths of V5. The horizontal segments have lengths of 2.
interval length = VTB
fractal dimension = 1.9036775
Square grid
3 segments
segment values:
1, 2, 1,-1
1,-2, 1, 1
2, 0, 1, 1
generator
level 2
level 6 (rounded corners)
interval length = VTB fractal dimension = 1.9036775
Square grid
3 segments
segment values:
1: 1, 2,-1, 1
2: 2, 0,-1, 1
3: 1,-2,-1,-1
^\
generator
level 2
level 6
This curve can be copied four times and placed on a square
initiator to create the closed curve shown at right. There is a
vague resemblance to the structure of bronchial tubes.
176
Like the /16 square grid family, the /16 triangle grid family has many spacefilling curves that pertile equilateral polygons
- in this case, triangles. I would like to show you a few. None of these examples are self-avoiders...but when rendered
with rounded corners, they reveal some unique characteristics. The next four specimens each have a segment of length 2
that lies horizontally across the middle of the 4x4 triangle that houses the generator. This horizontal segment is
responsible for extending the curve upward towards the pinnacle - increasingly with each fractal level.
interval length = VTB
fractal dimension = 2.0
Triangular grid
10 segments
segment values:
1, 0, 1
0, 1,-1
-1, 0, 1
0, 1,-1
2, 0,-1
0,-2, 1
1, 0, 1
-1, 1,-1
1, 0, 1
10: 1,-1,-1
S^\
generator
level 2
level 3 (rounded corners)
interval length = VTB
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
2, 0, 1, 1
0, 1, 1, 1
-1, 1,-1,-1
0,-1, 1, 1
-1, 1,-1,-1
2, 0,-1, 1
2,-2, 1,-1
generator
level 2
level 3 (rounded corners)
177
178
interval length = VTB
fractal dimension = 2.0
Triangular grid
7 segments
segment values:
2, 0, 1, 1
-2, 2,-1,-1
2, 0, 1, 1
0,-1, 1, 1
1,-1,-1,-1
0, 1, 1, 1
1,-1, 1,-
generator
level 2
level 3 (rounded corners)
interval length = VTB
fractal dimension = 1.9036775
Triangular grid
8 segments
segment values:
0, 1,-1,-1
1,-1, 1, 1
0, 1,-1,-1
-1, 1, 1, 1
2, 0, 1, 1
0,-2,-1,-1
1, 0, 1, 1
7L^7_
generator
level 2
level 3 (rounded corners)
On the next three pages are triangular specimens that I have rendered in color. The last one has the top one-fourth of the
triangle rotated 180 degrees and enlarged, to its right.
179
interval length = VTB
fractal dimension = 1.8502198
Triangular
grid
11 segments
segment values:
1
0, 1,-1,-1
2
2,-1, 1
3
0, 1,-1
-1
4
-1, 1,-1
-1
5
-1, 1, 1
sr>
6
1, 0, 1
\7.
7
0,-1,-1
-1
V 1
^
8
1, 0, 1
V<
7
9
0,-1, 1
/-. X
10: 1,-1, 1
/\ k I s
\j
11: 1, 0, 1
generator
H w
level 2
level 2 (rounded corners)
180
interval length = VTB fractal dimension = 2.0
Triangular grid
13 segments
segment values:
0, 1,
1,-
0,
-1,
2,
0,-
-1,
0,-
1,-
: 0,
: 1,
: 0,-
: 1,
generator
level 2
level 3 (rounded corners)
181
interval length = VTB
fractal dimension = 2.0
Triangular grid
13 segments
segment values:
0,
1,
0,
1,
-2,
0,
1,
0,
1,
: 0,
: 1,
: 0,
: 1,
1, 1,
0,-1,
1, 1,
0,-1,
2,-1,
0,-1,
■1, 1,
0,-1,
■1,-1,
■1,-1,
generator
level 2
level 3 (rounded corners)
182
Here are some non- triangle specimens with three-way symmetry. These tightly-coiled curves are of the dense variety that
evade being pulled apart to breathe by way of rounded corners. But they do have interesting chambers. The second
specimen is rendered with its various chambers colored in a playful manner.
interval length = VTB
fractal dimension = 2.0
Triangular grid
16 segments
segment values:
generator
level 3
interval length = VTB
fractal dimension = 2.0
Triangular grid
16 segments
segment values:
l
2
3
4
5
6
7
S
9
1,
0.
-1.
-1.
-1.
0,
1.
1,
10:0,
11; 1,
12:0,
13; 1,
14:0,
15: 1,
16: 0,
a.
i.
l
i.
i,-
i.
-l
-i
-l.
o.
i
-l
l.
-i
-l.
level 3
183
Vn
... and beyond
The number of plane-filling specimens in the V2 family is 2 (I am not counting Cesaro). The number of plane-filling
specimens in the V3 family (by my estimate) is 10. As we climb the family tree, the number of specimens increases non-
linearly, making exhaustive search quite an expensive proposition when many segments are involved. Consider the sheer
number of possible generators if each segment has four possible flippings, and connects any two grid points, where its
length is less than the interval length. I calculated the number of possible generators having up to 5 segments. Ready?
2 seg: 16
3 seg: 13,824 4 seg (triangle): 331,776
4 seg (square): 1,048,576
5 seg: 254,803,968
I have done some exploration of this huge space of possibilities, using both hand-drawn diagrams, and computer search
algorithms, and have discovered some interesting specimens. Let's look at some of those now, as well as a few gems
previously introduced by Mandelbrot and others.
First, let's start with a plane-filling curve that Mandelbrot introduced in his book. It is a member of the VI 7
square grid family, and it is a partial gridfiller. Mandelbrot pointed out that self-avoiding curves are not only more
aesthetic; they also make better models of forms found in nature (such as rivers and watershed trees). When a curve is
vertex self-touching, it "knots off". In this example below, the generator itself has a pinched point. This percolates
throughout the teragons, in a similar way that I showed you with the self -crossing 7-dragons. Here is Mandelbrot's
Knotted-off VI 7 curve:
Mandelbrot's Knotted-off Curve
interval length = VT7 fractal dimension = 2.0
Square grid
17 segments
segment values:
0, 1,-1,-1
0, l, 1, 1
1, 0,-1,-1
0, 1,-1,-1
1, 0, 1, 1
0, 1, 1, 1
1, 0, 1, 1
0,-1.-1.-1
i, o, i. l
:0, 1,-1,-1
: 1, 0, 1, 1
: 0,-1, 1. 1
: 0,-1,-1,-1
:-l, 0, 1, 1
: 0,-1,-1.-1
: 1, 0,-1,-1
: 1, 0, 1. 1
r
U — s
r
*
generator
level 2
level 3
184
Here is another VI 7 curve. It is a self-avoider, and it has a dimension of -1.81.
interval length = VT7 fractal dimension =
Square grid
12 segments
segment values:
1: 0, 1,-1,-1
2: 0, 1,-1,-1
3: 0, 1, 1, 1
4: 1, 1,-1,-1 j
>
6: 1, 0, 1, 1
7: 0,-1,-1,-1
8: 0,-1, 1, 1
9: -1, 0,-1,-1
10: 0,-1,-1,-1
11: 1, 0, 1, 1
12: 1, 0, 1, 1
w
w
<$k *&
/
f
f
generator
4
^
w
level 2 level 3
The V18 Square Grid Family
I have one specimen to show of this family. It is a
gridfiller. It is shown at right at level 3, rotated by 45
degrees. Personally, I find nothing attractive about
this specimen. It looks like a poorly-made
gingerbread man. But I am including it in the
book. . .even boring specimens deserve to be seen.
interval length = VTs
fractal dimension = 2.0
Square grid
18 segments
segment values:
1:
1. 1
2: 1
0,-1
-1
3:
1, 1
4: -1
0,-1
-1
5l
1. 1
8: 1
0,-1
-1
7:
-1, 1
8: 1
0,-1
-1
9:
-1, 1
10:-1
0,-1
-1
11:0
-1, 1
12: 1
0,-1
-1
13:
1, 1
14: 1
0,-1
-1
15:0
1, 1
16-1
0,-1
-1
17:0
1, 1
ia: 1
0,-1
1
f
^%
generator
level 2 (rounded corners)
185
The V19 Triangle Grid Family
Let's look at a few of the fine specimens of the VI 9 triangle grid family. I like to start with dragons, and so here is a
palindrome dragon with a pinched waist and pinched extremities. It is shown below at level 3 with rounded corners.
interval length = V~f9 fractal dimension = 2.0
Triangular grid
19 segments
segmenl
1: -1, 1, 1
2; 1, 0. 1
values:
"t^Jl^cS %
3: -L, 1, i
4; 1, 0. 1
5: 0,-1, 1
6: L. 0. 1
7: -1, 1, 1
8: L 0, 1
9; 0,-1, I
10: 1, 0, 1
11:0,-1, 1
12: L, 0, 1
13:-L, 1. 1
14: L, O, 1
15:0.-1. 1
WW $P \
^ 3#*$H&
16; I, 0, 1
175-1, 1, 1
IS: 1. 0, 1
19:-L, 1, 1
\ i generator level 2 level 2 (rounded corners)
186
o
Close-packing of seven circles results in a roughly-
hexagonal shape: the basis for the Gosper Curve. If you
completely surround these seven circles with a new layer of
circles, the total number of circles is increased to 19, as
shown at left. This 19-cell hexagonal grid is the basis for
another one of the wonderful generalized Gosper curves
discovered by Fukuda, et. al [4]. It is shown below.
interval length = Vl9
fractal dimension = 2.0
Triangular grid
19 segments
segment values:
1: 1. o, 1. 1
2: 1, 0, 1, 1
3: 0, 1,-1,-1
4: 0, 1,-1.-1
S: -1, 1, 1, 1
6: -1, 0.-1.-1
7: -1. 0.-1.-1
8: 1,-1,-1,-1
9: 1, 0. 1. 1
10: 0,-1. 1. 1
11:-1, 0,-1,-1
12^1. 1. 1. 1
13>1. 1. 1. 1
14: 0. 1,-1.-1
IS: 1, 0. 1. 1
Iti: 1, 0, 1, 1
17: I. 0. 1. 1
IB: 1, 1, 1, 1
19: 1,-1,-1,-1
generator
level 2
level 3
I discovered a curve based on this 19-cell hexagonal theme. Its dimension is less than 2, and so it has lots of open spaces,
which gives it some artistic breathing room. I call it "Mandala". It is shown in color on the next page.
Mandalc
interval length = V~f9
fractal dimension = 1.8832713
Triangular grid
13 segments
segment values:
0, 1,-1
-1, 1, 1
-1, 1, 1
0, 1,-1
1, 0, 1
1, 0, 1
1, 0, 1
0,-1, 1
0,-2,-1
10: 1,-1,-1
11: 0, 1,-1
12: 0, 1,-1
13: 1, 0, 1
generator
level 2
level 3
187
188
Remember the Anti-Gosper? Well, I suspect that the following curve has some things in common: it is roughly triangular
and more tightly-packed than its hexagonal cousin.
interval length = V~f9
fractal dimension = 2.0
Triangular grid
19 segments
segment values:
^ i>
i. i.
l, i,
o, l.
i,-i.-
, o,
.-i.-i.-
115-1,
12:0,
13: 1,
14: 0,
15: 1,
16>1
17: 1,
IS: 0,
19: 1,
0, 1,
-l.-l.-
0. 1.
-1,-1,-
Q< l>
1,-1,-
0, i,
1. l.
-i,-i.-
generator
level 2
level 3
The V20 Square Grid Family
There are five fours in twenty. And so I wondered if I could
build a space-filling curve by replacing the squares in
Mandelbrot's Quartet with rotated copies of a V4 square grid
family generator. Well, the Peano Sweep generator appears to do
the trick:
4 4 4
r
interval length = V20
fractal dimension = 2.0
Square grid
20 segments
segment values:
0, 1,-1,
0, 1,-1,
-1, o, 1,
-1, 0,-1.
0, 1, 1,
0, 1, 1,
i. 0,-1.
0, 1,-1,
10; 1, 0, 1.
11: 1, 0, 1.
12; 0,-1,-1,
13vl, 0, 1,
14; 0,-1,-1,
15: 0-1,-1,
IS; 1. 0, 1.
17:0, 1,-1,-
iS: 1, 0, 1,
19: 1. 0, 1.
20; 0,-1,-1,
i
f
4 i
r
w
f
generator
level 2
level 2 (rounded corners)
189
Here is a variation that uses a combination of the Peano
Sweep generator and another four-segment shape that
fractalizes to a square. It is a shape that would not
normally stand on its own as a plane-filling curve
generator. But in the context of the whole arrangement,
it works perfectly.
L
1
interval length = V20
fractal dimension = 2.0
Square grid
20 segments
segmenl
o, 1,
values:
10:0,
11:0,
12: 1.
13: 0,
14: 1,
15: 1.
16: 0,-
17: 1.
15: 0,-
19: O.-
20; 1,
f
generator
level 2
level 2 (rounded corners)
The following generator has a knotted-off square, like the yfY7 specimen we saw earlier.
interval length = V20
fractal dimension = 2.0
Square grid
20 segments
segment values:
12: 0,-1,-1,-1
13;
14:
r r
r
r^
generator
level 2
level 2 (rounded corners)
190
This curve is rather curious. It is a gridfiller with a bit of asymmetry.
interval length = V20 fractal dimension =
Square grid
20 segments
&$& &£ iff If Af At
level 3
i;
2: 1
3;
4: 1
S:
6: -1
7\
3. 1
9;
10:-1
11:0
12: 1
13:0
14: 1
15:
16: 1
17:
1S;-1
19:
20: 1
I, 1. 1
0,-1,-1
-1. 1 1
0,-1,-1
1. 1. 1
0,-1,-1
1. 1. 1
0,-1,-1
1. 1, 1
0,-1,-1
1. 1. 1
0,-1,-1
-1, 1. 1
0,-1,-1
1. 1, 1
0,-1,-1
-1. 1. 1
0,-1,-1
-1, 1. 1
0,-1,-1
i
^
W
r
>
^
^
f °^^^%
>
^
f
i
^
W
f
r
gen<
srato
r
level 2
The V21 Triangle Grid Family
Of the V71 triangle grid family, I have found a few fat palindrome dragons. Two of them are shown below.
interval length = VTI
fractal dimension = 2.0
Triangular grid
21 segments
segment values:
13: 1, G, 1,
14>1, 1. 1,
15: 1, 0, 1,
16:-1, 1, 1,
17: 1. 0. 1.
16: 0,-1.
10: 1, 0, 1,
20-1, 1, 1,
21: 1, O. 1.
level 3
generator
interval length = VTl
fractal dimension = 2.0
Triangular grid
21 segments
segment values:
16: 0.
17:-1.
IS: 0,
10; 1,-
20: 0.
generator
level 2 (rounded corners)
191
Since 21 is a triangular number, we can arrange the pertiles in a roughly
triangular array. Below is a triangular specimen of this family, followed
by a close cousin with dimension -1.89. On the next page is a color
rendering with rounded corners.
interval length = VTI
fractal dimension = 2.0
Triangular grid
21 segments
segment values:
S; 0. 1
6: -1. 1,
7: 0. 1.
«: 1. 0.
9: 0,-1.
10: 0.-1
11: l.-l
12:0. 1
13:-1. 1.
14: 1. 0.
15:0,-1.
16: l.-l.
17. 0. 1.
1*;0, 1,
19: 1.
20 0.-1
21: 1, 0.
level 2
level 3
interval length = VTI
fractal dimension = 1.8987358
Triangular grid
16 segments
segment values:
i
1, 0, 1, 1
2
0, 1,-1,-1
3
-1, 0, 1, 1
4
0, 1,-1.-1
W
5
0, 1. 1. 1
k 7
6
-1, 1, 1, 1
*\7w
7
1, 0, 1, 1
y~*\
S
0,-1,-1.-1
7 \
9
1, 0, 1, 1
/ JL-!
10: 1,-1, 1, 1
/ ^a7
Ui-1,-1,-1,-1
/ ^04
^ r^
13; 1, 0, 1, 1
/
143-1, 1,-1.-1
^r
15: 1, 0, 1, 1
1
6; 1,-1,-1,-1
generator
level 2
level 3
192
193
The V25 Square Grid Family
Now we come to another square number: 25. Of the V25 square grid family, I have only one specimen to show: the
Quadratic Gosper Curve. It is attributed to F.M Dekking [5], and also Doug McKenna [19]. This is a self-avoiding curve that
fills a square.
Quadratic Gosper Curve
interval length = V25 fractal dimension = 2.0
Square grid
25 segments
segment values:
W
w
2: 1. 0, 1. 1
3: Q. 1,-1,-1
4: -1, 0,-1, -1
j
■*
r
b. 1, 0, 1, 1
?: 0. 1,-1.-1
B: -1. O.-l.-l
f
W
^
*,
r
9: -I. 0. I, 1
1&;0, 1.-1,-1
tl: 1. 0. 1. 1
12: 1. 0. 1, 1
^
4
W
^
f
>
r
w
13: 1. 0,-1.-1
M:0. 1, 1. 1
15: i 0, i. 1
16:0.-1. 1, 1
W
4
^
175 0.-1. 1, 1
lfl:-l. 0.-1,-1
19: 0.-1, 1. 1
20:0.-1.-1.-1 d
^
r
"^
>
23:0, 1. 1, 1
23: 1. 0. 1, 1
24: 0.-1,-1.-1
25: 0.-1,-1,-1
gen
erat<
)r
level 2
level 3
The V25 Triangle Grid Family
The V25 triangle grid family has a whale of a bumpy dragon, shown below.
interval length = V25 fractal dimension = 2.0
Triangular grid
2 5 segments
segment values
2: 1,-1, 1. 1
3: 0. 1, 1. 1
4: -1. 0. 1, 1
5: 0, 1, 1, 1
e ] -i, i, i
7: 0. 1, 1, 1 4
8: 1,-1, 1, 1
*. -1. 0. 1, 1
10: 1,-1, 1, 1
11: 0. 1. 1. 1
15: 1.-]. 1, 1
133-1. P. ], i
14: 1,-1. 1, I
15; o. 1, 1, i
ir>i, a, i, i
18: 1,-1, 1. 1
19: 0, 1, 1, 1
20: 1,-1, 1, 1
21: 0. i, ], i
22i-l, 0. 1. 1
23:0, 111
24; 1,-1, 1, 1
25:0, 1. 1. 1
generator
level 2
level 3 (rounded corners)
On the next page are three more specimens of this family. The third one is shown on the following page enlarged at level
3 with rounded corners.
194
interval length = V25 fractal dimension = 2.0
Triangular grid
2 5 segments
segment values:
S Q. 1.
fc i. "
10- a .j
lli-l. "
12: l
13: 1
li: 1
IS
1&.-1
17.
1&.-1
IS, 1
20. C
21. 1
22.
21. 1
-■■: '■:
Z5: ]
generator
level 2
level 2 (rounded corners)
interval length = V25 fractal dimension = 2.0
Triangular grid
11 segments
segment values:
3, 0, 1
0, 1, 1
-1, 0,-1
-2, 2,-1
2, 0, 1
0,-1, 1
1, 0,-1
0,-1, 1
1,-1,-1
10: 0, 1, 1
11: 1,-1,-1
generator
level 2
level 4 (rounded corners)
interval length = V25 fractal dimension = 2.0
Triangular grid
11 segments
segment values:
0, 3, 1
2, 0, 1
0,-2,-1
1,-1, 1
0, 1,-1
-1, 1, 1
1, 0, 1
0,-1,-1
1, 0, 1
10: 0,-1,-1
11: 1, 0, 1
generator
level 2
level 3 (rounded corners)
195
196
The V27 Triangle Grid Family
I want to show you two related specimens of the V27 triangle grid family. They were introduced in Mandelbrot's book,
and they are variations of the Snowflake Sweep. Now, as we saw earlier, the snowflake sweep is a member of the V9
family, so why are these specimens V27? The reason is due to the nature of my taxonomy scheme, which requires that all
generator segments lie between grid points. With a slight variation to my scheme, these curves could be represented in
the V9 family, by relaxing this requirement. The smallest segments occurring within the interior of the generator would
fall between the cracks, as it were. We can say that these specimens are closely related to the V9 family, except that they
have a few small (and clever) genetic mutations that permit extra details to emerge in the crevices. The first specimen is
one Mandelbrot called "Monkeys Tree". The second is a variant of the Snowflake Sweep, in which the whole generator is
transformed and takes the place of the fifth segment. This is rendered stylistically on the next page.
Monkeys Tree
interval length = V27 fractal dimension = 1.9026998
Triangular grid
11 segments
segment values:
1: -1, 2, 1,-1
2: -1, 2,-1, 1
3: 1, 1, 1, 1
4: 2,-1,-1, 1
5: -1, 0,-1, 1
6: -1, 0, 1,-1
7: 0,-1,-1,-1
8: 1,-1,-1,-1
9: 1,-1, 1, 1
10: 1, 1,-1,-1
11: 1, 1, 1, 1
<^T>
generator
i^d
level 2
level 3 (rounded corners)
Mandelbrot Snowflake Sweep #2
interval length = V27 fractal dimension = 2.0
Triangular grid
13 segments
segment val
-i, 2, l
-1, 2. 1
1. 1- 1
2,-1,
-1. 0,
-1, 0,
t -l,
1.-1.
1> 1,
10: 0.-1,
11: 0,-1,
12: 1, 1,
13: 1, 1,
generator
level 2
level 3
197
198
This specimen was rendered with loving curves and printed on the hardback cover
of one of the editions of Mandelbrot's book. It is reproduced at left.
The two final specimens I want to show you are of the V29 triangle grid and
V36 square grid families. These both have dimensions less than 2, but they are self-
avoiding, and so they do not require rounded corners. Their diagrams are shown
below, and on the next two pages are color renderings. The second one is my
attempt at filling the Koch Snowflake. Enjoy the last two specimens of this book!
interval length = V29
fractal dimension = 1.9118462
Square grid
21 segments
segment values:
1: O, 1,-1,-1
2: O, 1, 1, 1
3: O, 1, 1. 1
4: 0, 1, 1, 1
5: -1, 0.-1,-1
6: O, 1, 1, 1
7: 1, 0, 1. 1
6: 1, 0, 1, 1
9: 1, 0, 1, 1
10:O, 1,-1,-1
11: 1, 0, 1, 1
12:0,-1, 1, 1
13:0,-1, 1, 1
1*0,-1. 1, 1
15:-2,-l. 1,-1
16:0,-1,-1,-1
17: 1, 0, 1. 1
13: 1, 0, 1, 1
19:0, 1,-1,-1
20: 1, 0, 1, 1
21: 1, 0. 1, 1
generator
level 2
level 3
interval length = V36 fractal dimension = 1.8394415
Triangular grid
18 segments
segment values
1: 0, 2,-1,-1.
2: -I, 1,-1.-1
3: 0, 1, 1, 1
4: 1, 0,-1,-1
5: 2, 0, 1, 1
6: 1, 0,-1.-1
7: 1,-1, 1, 1
8: -1, 0, 1, 1
9: -1, 0, 1. L
lOs-1, 0, 1, 1
11: 0,-1,-1,-1
12: 1, 0,-1,-1
13: 1,-1, 1, 1
14: 0,-1,-1,-1
15:0,-1,-1,-1
16: 1, 0,-1,-1
17: 0, 1, 1. 1
1£: 2, 0, 1, 1
generator
level 2
level 3
199
200
201
My Brain Fillith Over
I think that's enough brain-filling for one book.
I hope you enjoyed going on this expedition of fractal specimens with me. I have enjoyed discovering them, and I
thoroughly enjoyed building this book. But let's not stop here. There are more fractal curves to discover, and there are
more ideas, inventions, artworks, and insights about nature, the human mind, and the vast potential of mathematics -
using the computer as an extension of the human eye and brain. For further adventures, visit me at fractalcurves.com
where I will be expanding this Fractal Family Tree.
202
References
[0] Abelson, H v and diSessa, A. Turtle Geometry. MIT Press, 1986.
[I] Bandt, C. and Gummelt, P. Fractal Penrose Tilings I. Construction and matching rules. Aequationes Mathematicae, vol. 53, Numbers
1-2, Feb. 1997
[2] Barnsley, M. Fractals Everywhere. Academic Press, 1993.
[3] Carbajo, V. Fractal artworks published online at: http:/ / www.carbajo.net/
[4] Fukuda, M. Shimizu and G. Nakamura, New Gosper Space Filling Curves, Proceedings of the International Conference on
Computer Graphics and Imaging (CGIM2001) 34-38 . 2001
[5] Dekking, F. M. Recurrent Sets: a Fractal Formalism. Delft University of Technology, 1982.
[6] Fiedorowicz, Z. . V4 triangle grid family triangle curve variation, published at:
http: / / www.math.osu.edu / ~fiedorow / math655 / examples2.html
[7] Gardner, M. In which "monster curves" force redefinition of the word "Curve". Scientific American. 235. 1976
[8] Gelbrich, G. Fractal Penrose Tiles II: Tiles with fractal boundary as duals of penrose tiles. Aequationes Mathematicae, vol. 54,
Numbers 1-2, Aug. 1997
[9] Hilbert, D. "Uber die stetige Abbildung einer Linie auf ein Flachenstuck", Math. Ann., 1891 (38), pp. 459-460.
[10] Hutchinson, J. Fractals and Self-Similarity. Indiana University Math. J. 30 (5) 713-747 1981.
[II] Karzes, T. Tiling Fractal curves published online at: http:/ / karzes.best.vwh.net/
[12] Koch, H. "Sur une courbe continue sans tangente, obtenue par une construction geometrique elementaire." Archiv for Matemat.,
Astron. och Fys. 1, 681-702, 1904
[13] Koch, H. "Une methode geometrique elementaire pour l'etude de certaines questions de la theorie des courbes planes", Acta
Mathematica, Stockholm, 1906 (30), pp. 145-174.
[14] Mandelbrot, B. The Fractal Geometry of Nature. W. H. Freeman and Company. 1977
[15] Mandelbrot, B. The Fractal Geometry of Nature, 1977 (illustrating the quadric Koch Island)
[16] Mandelbrot, B. The Fractal Geometry of Nature, 1977 (describing the "Quartet")
203
[17] McKenna, D. Fractal artworks, available at: http: / / www.mathemaesthetics.com / MathArtPrints.html
[18] Peano, G. "Sur une courbe, qui remplit toute une aire plane", Mathematische Annalen 36 (1): 157-160. 1890
[19] Prusinkiewicz, P. and Lindenmayer, A. The Algorithmic Beauty of Plants. Springer, 1990
[20] Sagan, H. Space-Filling Curves, Springer- Verlag, New York, 1991
[21] Schraa, W. Range Fractal, published online at: http: / / wolter.home.xs4all.nl / index.html
[22] Teachout, G. Spacefilling curve designs featured in the web site: http: / / teachoutl .net / village /
12
About the Author
Jeffrey Ventrella is an artist and a software programmer. He writes about artificial life,
virtual worlds, computational art, and human-computer interfaces. He lives in the San
Francisco Bay area.
204